我的主视图上有一个 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>
有人已经问过这个问题 here ,我正在做几乎相同的事情,但它不起作用,即使索引更改为 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>
现在您的触发器将在被击中时覆盖属性值。
当你在看它的时候,你应该看看this link列出设置 DP 值的优先顺序。
关于c# - 无法在 WPF 中设置 DataTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448098/