代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

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

  •  2
  • Tony The Lion  · 技术社区  · 14 年前

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

    我能用按钮上的触发器来做这个吗?

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

    2 回复  |  直到 14 年前
        1
  •  4
  •   Dan Bryant    14 年前

    你可以通过使用样式来实现这一点。如果要将其直接绑定到文本框,可以执行以下操作:

        <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,则此操作有效。在这种情况下,样式可用于其他按钮和文本框配对。

        2
  •  2
  •   itowlson    14 年前

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