通过DataTrigger改变按钮的IsEnabled状态

本文关键字:IsEnabled 状态 按钮 DataTrigger 改变 通过 | 更新日期: 2023-09-27 18:03:19

我试图改变基于文本框的按钮的IsEnabled状态。TextChanged事件或组合框。SelectionChanged事件。我试图用事件做到这一点,但启用状态正在被加载的数据所改变。我正在用文本框和组合框填充WPF元素网格。网格是通过列表的ItemSource填充的。

我正在寻找的是编辑器,其中包含要用数据填充的网格和Apply按钮启用状态设置为false,直到用户更改文本框或组合框的数据。此时,datattrigger应该被触发并更改btnApply。IsEnabled为true。我不确定该为事件的值放什么,但"True"似乎不正确,True和HasChanged不起作用。

如果控件呈现给用户时IsEnabled为false(默认),我愿意采用除DataTrigger之外的其他方法。

到目前为止我写的是:

  <UserControl.Resources>
    <Style x:Key="tbChanged" TargetType="{x:Type Button}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=TextBox.TextChanged}" Value="HasChanged">
          <Setter Property="Button.IsEnabled" Value="True"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ComboBox.SelectionChanged}" Value="HasChanged">
          <Setter Property="Button.IsEnabled" Value="True"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </UserControl.Resources>
  <Button x:Name="btnApply" Content="Apply" Height="22" Width="50" Margin="5,5,0,0"  HorizontalAlignment="Left" VerticalAlignment="Top" IsEnabled="False" Click="btnApply_Click" Style="{StaticResource tbChanged}"/> 

通过DataTrigger改变按钮的IsEnabled状态

这些触发器不适合这样做,它们要么是活动的,要么是不活动的,这意味着它们有时间轴,而事件没有。你可以使用Blend SDK中的交互性,它有一个可以调用ChangePropertyActionEventTrigger,例如

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
<TextBox Name="myTextBox" />
<ComboBox Name="myComboBox" />
<Button IsEnabled="False" Content="Test">
    <i:Interaction.Triggers>
        <i:EventTrigger SourceName="myTextBox" EventName="TextChanged">
            <ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"/>
        </i:EventTrigger>
        <i:EventTrigger SourceName="myComboBox" EventName="SelectionChanged">
            <ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

也有原生的EventTriggers,但它们非常受限制,你可能无法使用它们完成此操作。