具有不同样式的多层网格,未触发WPF的子样式

时间:2016-10-19 20:28:46

标签: wpf xaml

TidBit:这只能在XAML中完成,没有C#,因为我无法访问它。

我有一个困境,我在表单上有一个网格(主网格控制所有其他控件),其风格根据用户启用/禁用内容。现在,我添加了一个具有取决于它的样式的复选框,它将隐藏/显示一个组框。我的问题是,虽然应用了初始设置器,但这种风格不会触发:

    <Style x:Key="StatusVisibility">
      <Setter Property="Control.Visibility" Value="Hidden"/>
        <Style.Triggers>                
            <DataTrigger Binding="{Binding Source={StaticResource Dsource}, Path=Value.Properties[chkbox1].Value}" Value="Y">
                <Setter Property="Control.Visibility" Value="Visible"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

所以在这种情况下,可见性将被设置为隐藏,我将无法看到它,如果我在这里翻转了设置者(最初可见性是可见的),它将显示组框。

为了使事情更加奇怪,这个复选框被设置为一个数据库,以便if是“Y”或“N”设置可见性:

<CheckBox  Grid.Row="0"  Grid.Column="0" Margin="2,0,2,0" VerticalContentAlignment="Center" Name="ckbox1" HorizontalAlignment="Left"  Width="Auto" MinWidth="100" 
                           IsChecked="{Binding Source={StaticResource Dsource}, Path=Value.Properties[ckbox1].Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                           Content = "Display ?"/>

这是我要设置的组框:

<GroupBox Header="GroupBox" Name="GroupBox" VerticalAlignment="Top" ClipToBounds="False" Margin="2,0,2,0" Style="{StaticResource StatusVisibility}">

现在,我要使用的是,在有两个网格的情况下是否需要遵循特定的规则,并且父网格样式会覆盖子网格样式?

另外,如果我希望动态启用/禁用此子组框,我是否需要做一些特别的事情?

由于

1 个答案:

答案 0 :(得分:1)

如果您没有访问代码,则可以通过将GroupBox.Visibility绑定到CheckBox.IsChecked媒体资源,在xaml中完成所有操作:

<StackPanel>
    <GroupBox Visibility="{Binding ElementName=MyCheckbox, Path=IsChecked, Converter={VisibilityConverter}}"/>
    <CheckBox x:Name="MyCheckbox" />
</StackPanel>

这将要求您制作一个VisibilityConverter(一个简单的谷歌搜索)。然后,您可以删除DataTrigger