Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据其他控件-WPF中的属性更改属性_C#_Wpf_Triggers - Fatal编程技术网

C# 根据其他控件-WPF中的属性更改属性

C# 根据其他控件-WPF中的属性更改属性,c#,wpf,triggers,C#,Wpf,Triggers,当文本框属性验证时,我想使用某种触发器将窗口中的按钮更改为IsEnabled=False。我的文本框的HasErrors为True 我可以用按钮上的某种触发器来完成吗 如果是的话,举个例子就好了 是的,您可以使用触发器执行此操作,但由于您引用的是另一个元素,因此必须使用DataTrigger而不是普通触发器: <Button> <Button.Style> <Style TargetType="Button"> <Style.Tr

当文本框属性
验证时,我想使用某种触发器将窗口中的按钮更改为
IsEnabled=False
。我的文本框的HasErrors
True

我可以用按钮上的某种触发器来完成吗


如果是的话,举个例子就好了

是的,您可以使用触发器执行此操作,但由于您引用的是另一个元素,因此必须使用DataTrigger而不是普通触发器:

<Button>
  <Button.Style>
    <Style TargetType="Button">
      <Style.Triggers>
        <DataTrigger Binding="{Binding (Validation.HasError), ElementName=tb}" Value="True">
          <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>


注意:您必须使用样式而不是Button.Triggers集合,因为Button.Triggers只能包含EventTriggers。

您可以使用样式来完成此操作。如果要将其直接绑定到文本框,可以执行以下操作:

    <Style x:Key="DisabledOnErrors" TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding (Validation.HasErrors)}" Value="True">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>




如果按钮尚未绑定到其他属性的DataContext,则此操作有效。在这种情况下,该样式可用于其他按钮和文本框配对。

WPF TextBox对象没有验证属性-我缺少什么吗?Jake:您缺少了验证。HasError attached属性。@itowlson:谢谢,如果我不是唯一一个还需要了解WPF的人,请发布此内容;)是否可以为一个按钮应用于多个文本框?您可以尝试使用多重绑定和自定义IMultiValueConverter。我在这些方面没有太多经验,但总体思路是使用下面显示的ElementName语法itowlson将按钮IsEnabled直接绑定到绑定到所有文本框(Validation.HasErrors)的多重绑定。然后需要一个IMultiValueConverter,它将获取bool值的列表,然后不将它们全部进行ORing。我正在尝试使用图像和可见性属性,但它不起作用。当我使用按钮(具有可见性属性)时,它确实起作用。我就是不明白为什么。有什么想法吗?谢谢,马克。
    <TextBox x:Name="myTextBox" />
    <Button Style="{StaticResource DisabledOnErrors}" 
            DataContext="{Binding ElementName=myTextBox}" />