在WPF中设置数据触发器时遇到问题
本文关键字:遇到 问题 触发器 置数据 WPF | 更新日期: 2023-09-27 18:12:48
我有一个ComboBox
和Button
在我的主视图,我想应用一个样式的按钮,这样当组合框索引设置为1,按钮变得可见(最初它是隐藏的)。这是我的XAML代码:
<Grid>
<StackPanel Orientation="Vertical" Margin="10">
<ComboBox Name="comboBox"/>
<Button Name="myBtn" Content="Hello" Visibility="Hidden">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
有人已经问了一个关于这个的问题,我在做几乎相同的事情,但它不起作用,即使索引更改为1,按钮仍然隐藏。comobox最初在后面的代码中使用2项填充。
问题是,本地设置的依赖属性值(就像您对可见性所做的那样)比从样式触发器设置的依赖属性值具有更高的优先级。因此,即使触发了,它也不会覆盖您已经设置的值。
简单的解决方案是将默认值设置为样式Setter
:
<Button Name="myBtn" Content="Hello">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
现在你的触发器将覆盖属性值,当它被击中。
当你看到它时,你应该看看这个链接,它列出了设置DP值的优先顺序。