在WPF中设置DataTrigger时遇到问题

6

我的主视图上有一个 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,按钮仍然隐藏。组合框最初在代码中使用2个项目进行填充。感谢您的任何帮助。

1个回答

16
问题在于本地设置的依赖属性值(例如您使用可见性)优先级高于从样式触发器设置的属性值。因此,即使触发器被触发,它也不会覆盖您已经设置的值。 简单的解决方法是在样式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 值的优先级顺序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接