6

我的主视图上有 aComboBox和 a 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 项。任何帮助表示赞赏。

4

1 回答 1

16

问题是在本地设置的依赖属性值(就像您对可见性所做的那样)具有比从样式触发器设置的更高的优先级。因此,即使触发触发器,它也不会覆盖您已经设置的值。

简单的解决方案是改为在 style 中设置默认值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 值的优先顺序。

于 2013-05-08T18:57:05.887 回答