通过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}"/>
这些触发器不适合这样做,它们要么是活动的,要么是不活动的,这意味着它们有时间轴,而事件没有。你可以使用Blend SDK中的交互性,它有一个可以调用ChangePropertyAction
的EventTrigger
,例如
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
,但它们非常受限制,你可能无法使用它们完成此操作。