无法将DataTrigger中一个控件的属性绑定到不同网格中的其他控件

时间:2011-11-07 12:22:22

标签: wpf xaml data-binding binding wpf-controls

我在这个例子中有两个控件但是在实际的应用程序中我有更多的whick,具体取决于Grid one中属性的内容值(例如),其他一些标签,TextBoxes,TextBlocks和Buttons将是在网格2中可见或折叠(例如)。

但为了简化我的问题,我将有一个简化的例子......

<Grid Name="gridOne">
    <Label Content="{Binding Collection.Name}" Name="lblCaption"/>
</Grid>

<Grid Name="gridTwo">
    <Label Content="My Label" Visibility="Collapsed">
        <Label.Style>
            <Style TargetType="Label">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>
    <TextBox Text="{Binding EmployerName}" Visibility="Collapsed">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</Grid>

我知道如果我将属性Visibility as Collapsed设置为默认控件但我有很多集合并且我不认为每个Collection有一个DataTrigger是实现它的好方法,这也行不通。无论如何,当在一个好的方式处理属性Visibility时,在不同的网格中绑定控件时会出现一个问题。

提前致谢!

1 个答案:

答案 0 :(得分:2)

本地值比样式触发器花费precedence。将可见性初始化移动到样式中:

<Label Content="My Label">
  <Label.Style>                    
    <Style TargetType="Label">
      <Setter Property="Visibility" Value="Collapsed"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
          <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Label.Style>
</Label>