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

时间:2010-03-10 23:46:45

标签: c# wpf triggers

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

我可以使用按钮上的某种触发器来执行此操作吗?

如果是的话,一些例子会很好!

2 个答案:

答案 0 :(得分:4)

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

    <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>

    <TextBox x:Name="myTextBox" />
    <Button Style="{StaticResource DisabledOnErrors}" 
            DataContext="{Binding ElementName=myTextBox}" />

如果按钮尚未绑定到其他属性的DataContext,则此方法有效。在这种情况下,Style可以重复用于其他按钮和文本框配对。

答案 1 :(得分:2)

是的,您可以使用触发器执行此操作,但因为您指的是另一个元素,您必须使用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>

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