WPF如何在文本框中使用验证规则而不创建要在对话框中绑定的额外属性?

詹姆斯·约书亚街

所以我有一个在这里工作的例子:

     <TextBox.Style>
          <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
              <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                          Value="{Binding RelativeSource={RelativeSource Self}, 
                        Path=(Validation.Errors), Converter={StaticResource ValidationConverter}}"
                        />
              </Trigger>
              <Trigger Property="Validation.HasError" Value="false">
                <Setter Property="ToolTip"
                          Value="GraphPenWidth" />
                <Setter Property="Background" 
                    Value="Blue"
                    />
              </Trigger>
            </Style.Triggers>
          </Style>
        </TextBox.Style>
        <TextBox.Text>
          <Binding Path="GraphPenWidth" UpdateSourceTrigger="PropertyChanged"  Mode="TwoWay">
            <Binding.ValidationRules>
              <DaedalusValidationRules:IntegerValidationRule />
            </Binding.ValidationRules>
          </Binding>
        </TextBox.Text>

但是,有什么方法可以使用验证规则而不绑定到数据上下文?

我正在尝试制作一个通用对话框,可以将各种验证规则传递给该对话框。但是,一段时间后,我发现即使在xaml中创建验证规则时,它也无法正常工作。我已经读过我可以将TextBox的Text属性绑定到自身,但这是行不通的。

但是,当我在ValidationRule中放置一个断点时,似乎在插入数据时在正确的位置调用了该断点。另外,由于背景为蓝色,因此样式似乎可以正常工作。这使我相信Validation.HasError永远不会变为真实,或者变得真实,并且变回如此之快,以至于我看不到变化。

我输入的每个字母后都会调用验证规则,但文本框不会更新为显示haserror = true。为什么是这样?

是否只允许我将属性绑定到自身?有没有其他方法可以使用没有绑定的验证规则,还是我总是必须创建一个额外的属性来绑定?最简单的解决方法是创建一个额外的text属性并将其毫无意义地绑定,但是我希望这不是必需的。

 <TextBox    
    Margin="3"
    Height="25"
    VerticalAlignment="Center"
    VerticalContentAlignment="Center"
    HorizontalContentAlignment="Left"
    Grid.Column="1"
    x:Name="MainTextBox"
    >
    <TextBox.Text>
      <Binding RelativeSource="{RelativeSource Self}" Path="Text" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
          <rules:IntegerValidationRule />
        </Binding.ValidationRules>
      </Binding>
    </TextBox.Text>

    <TextBox.Style>
      <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
          <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" 
                    Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
                            Path=(Validation.Errors), Converter={StaticResource ValidationConverter}}"
                    />
            <Setter Property="Background" 
                    Value="Red"
                    />
          </Trigger>
          <Trigger Property="Validation.HasError" Value="false">
            <Setter Property="ToolTip"
                          Value="Default Signal Height Percentage" />
            <Setter Property="Background" 
                    Value="Blue"
                    />
          </Trigger>
        </Style.Triggers>
      </Style>
    </TextBox.Style>
  </TextBox>

因此,我实际上设法通过在GenericDialogBox上创建一个要绑定到被称为Text的属性,然后将该Text属性绑定到Textbox的Text属性,来在xaml中进行验证。但是,我似乎无法在后面的代码中使用相同的代码。

  <TextBox.Text>
      <Binding Path="Text" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
          <rules:IntegerValidationRule />
        </Binding.ValidationRules>
      </Binding>
    </TextBox.Text>

但是当我在后面的代码中尝试此操作时,它不起作用。

  Binding myBinding = new Binding();
  myBinding.Source = this;
  myBinding.Path = new PropertyPath("Text");
  myBinding.NotifyOnValidationError = true;
  myBinding.NotifyOnSourceUpdated = true;

  myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

  myBinding.ValidationRules.Add(rule);
  MainTextBox.SetBinding(TextBlock.TextProperty, myBinding);

我想念什么?

詹姆斯·约书亚街

从后面的代码放弃绑定,我在xaml中创建一个到属性的绑定,然后在后面的构造函数的代码中,我将传递给构造函数的验证规则添加到构造函数中,如下所示:

public GenericDialogBox(string MainLabelContent, string WindowTitle, string TextboxDefaultText, ValidationRule rule)
    {
      this.DataContext = this;
      Text = "";
      if (rule != null)
      {
        TextBoxValidationRule = rule;
      }
      InitializeComponent();
      MainLabel.Content = MainLabelContent;
      Title = WindowTitle;

      Binding binding = BindingOperations.GetBinding(MainTextBox, TextBox.TextProperty);
      binding.ValidationRules.Add(rule);


      MainTextBox.SelectAll();
      MainTextBox.Focus();
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF如何在文本框中使用验证规则而不创建要在对话框中绑定的额外属性?

来自分类Dev

如何在对话框中使用属性集

来自分类Dev

如何在Android的警报对话框中验证文本框

来自分类Dev

如何在对话框中使用 QnA 服务?

来自分类Dev

如何在对话框中创建片段?

来自分类Dev

如何在DM脚本中动态使用对话框文本框

来自分类Dev

如何在文本框中添加额外的属性参数?

来自分类Dev

如何在对话框的答案前放置文本

来自分类Dev

对话框中检查文本框不为空时如何保存对话框

来自分类Dev

在对话框中使用Drawable

来自分类Dev

使用javascript在对话框中输入文本

来自分类Dev

如何在对话框中调用瀑布对话框-Azure Bot构建器

来自分类Dev

如何在对话框中显示片段?

来自分类Dev

如何在对话框中实例化画布?

来自分类Dev

如何在对话框中换行

来自分类Dev

如何在对话框菜单中列出分区?

来自分类Dev

如何在对话框警报中添加多个文本视图和EditText

来自分类Dev

使用DialogBoxIndirect时,如何在对话框关闭时获取用户输入的文本?

来自分类Dev

如何在对话框中使用数字选择器

来自分类Dev

WPF验证规则防止在文本框中输入小数?

来自分类Dev

WPF中的文本框的条件验证规则?

来自分类Dev

WPF如何创建具有验证和绑定的自定义文本框

来自分类Dev

如何在PHP中使用jQuery获取对话框中文本框的值,我将其显示为空白还是未定义

来自分类Dev

清除绑定到wpf中的静态属性的文本框

来自分类Dev

如何在面板中的文本框中使用foreach

来自分类Dev

在jquery对话框中使用值设置文本框字段

来自分类Dev

如何在Visual Basic 6.0中使用文本框创建数组

来自分类Dev

如何在自定义对话框中聚焦文本框,以便光标在框内闪烁

来自分类Dev

如何在SQL Developer的“输入绑定”对话框中使用日期变量?

Related 相关文章

  1. 1

    WPF如何在文本框中使用验证规则而不创建要在对话框中绑定的额外属性?

  2. 2

    如何在对话框中使用属性集

  3. 3

    如何在Android的警报对话框中验证文本框

  4. 4

    如何在对话框中使用 QnA 服务?

  5. 5

    如何在对话框中创建片段?

  6. 6

    如何在DM脚本中动态使用对话框文本框

  7. 7

    如何在文本框中添加额外的属性参数?

  8. 8

    如何在对话框的答案前放置文本

  9. 9

    对话框中检查文本框不为空时如何保存对话框

  10. 10

    在对话框中使用Drawable

  11. 11

    使用javascript在对话框中输入文本

  12. 12

    如何在对话框中调用瀑布对话框-Azure Bot构建器

  13. 13

    如何在对话框中显示片段?

  14. 14

    如何在对话框中实例化画布?

  15. 15

    如何在对话框中换行

  16. 16

    如何在对话框菜单中列出分区?

  17. 17

    如何在对话框警报中添加多个文本视图和EditText

  18. 18

    使用DialogBoxIndirect时,如何在对话框关闭时获取用户输入的文本?

  19. 19

    如何在对话框中使用数字选择器

  20. 20

    WPF验证规则防止在文本框中输入小数?

  21. 21

    WPF中的文本框的条件验证规则?

  22. 22

    WPF如何创建具有验证和绑定的自定义文本框

  23. 23

    如何在PHP中使用jQuery获取对话框中文本框的值,我将其显示为空白还是未定义

  24. 24

    清除绑定到wpf中的静态属性的文本框

  25. 25

    如何在面板中的文本框中使用foreach

  26. 26

    在jquery对话框中使用值设置文本框字段

  27. 27

    如何在Visual Basic 6.0中使用文本框创建数组

  28. 28

    如何在自定义对话框中聚焦文本框,以便光标在框内闪烁

  29. 29

    如何在SQL Developer的“输入绑定”对话框中使用日期变量?

热门标签

归档