2013-05-08 67 views
6

我的主视图中有一个ComboBox和一个Button,我想将一个样式应用于按钮,以便当组合框设置为1时,该按钮变为可见(最初它隐藏)。这是我的XAML代码:在WPF中设置DataTrigger时出现的问题

<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个项目。任何帮助表示赞赏。

回答

15

问题是,在本地设置的依赖项属性值(如您对可见性所做的设置)优先于那些从样式触发器设置的属性值。因此,即使触发器被击中,它也不会覆盖您已经设置的值。

简单的解决办法是改为设置在样式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值的优先顺序。