c# - 无法在 WPF 中设置 DataTrigger

标签 c# wpf xaml styles datatrigger

我的主视图上有一个 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/

相关文章:

c# - 为什么我得到 System.IndexOutOfRangeException

c# - 如何使用 Gtk Sharp 和 C# 创建用于在代码中绘图的 Cairo Context

c# - 如何检测隐藏的桌面?

c# - 在线程之间移动 DependencyObject

c# - 添加要在 XAML 中使用的类

c# - 按键使用 list<int> 作为 linq 组

c# - LINQ to Entities 无法识别方法 'System.Object GetValue(...)'

c# - 在 avalonEdit 上显示边框 :TextEditor

.net - 处置 Microsoft.Owin.Hosting.WebApp 抛出 'System.ObjectDisposedException'

c# - 尝试在 Xamarin XAML 中的 ActivityIndi​​cator 上设置特定于设备的比例会导致崩溃