我们有一个标准样式的文件。我们在所有GroupBox元素上使用了一种样式SectionGroup
。它有一个自定义模板,使用边框在标题下面添加下划线等。
在一个页面上,我们在GroupBox标题旁边有一个复选框;当用户取消选中该复选框时,GroupBox的内容将隐藏(可见性已折叠)并且标题仍保留。不幸的是,标题下面的下划线看起来很难看;我们也想隐藏这个。
我已经给了我最好的尝试,所以父SectionGroup
样式现在看起来像这样:
<Style x:Key="SectionGroup" TargetType="GroupBox">
<Style.Resources>
<Thickness x:Key="HeaderBorderThickness">0,0,0,1</Thickness>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupBox">
<Grid Margin="0">
...
<Border Grid.Row="0" BorderThickness="{DynamicResource HeaderBorderThickness}" >
<TextBlock Text="{Binding Header, RelativeSource={RelativeSource AncestorType=GroupBox}}"/>
</Border>
...
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
通过定义HeaderBorderThickness
资源并将其用作DynamicResource,我可以在我的页面中覆盖它(as explained in this answer):
<GroupBox>
<GroupBox.Style>
<Style TargetType="GroupBox" BasedOn="{StaticResource SectionGroup}">
<Style.Resources>
<Thickness x:Key="HeaderBorderThickness">0,0,0,0</Thickness>
</Style.Resources>
<!-- TODO triggers here.. -->
</Style>
</GroupBox.Style>
<GroupBox.Header>Section One</GroupBox.Header>
...contents...
</GroupBox>
的确,通过重新定义相同键的厚度,DynamicResource
按预期工作,并且标题上没有下划线。
现在我需要根据触发器/绑定来切换它。我对此很陌生,但在本页的其他地方我已经想出了这样的事情:
<Grid Visibility="{Binding Path=FooBoolean, Converter={StaticResource BooleanToVisibility}}">
我认为我们的viewmodel类中有更多魔法(遵循现有绑定和属性的示例),但它可以工作。
现在问题是 - 如何将FooBoolean
中的布尔值绑定到HeaderBorderThickness
资源值?或者我可以使用其他方法来实现我的目标?
答案 0 :(得分:0)
在我看来,您可以使用DataTrigger
以更多WPF方式执行此操作,可能是这样的:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Header, RelativeSource={RelativeSource AncestorType=
GroupBox}}"/>
<Rectangle Grid.Row="1" Height="1" Margin="0,2,0,0" Fill="Black">
<Rectangle.Style>
<Style>
<Setter Property="Rectangle.Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{IsChecked, ElementName=YourCheckBox}"
Value="False">
<Setter Property="Rectangle.Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
</Grid>
此方法可让您设置Width
,Height
,Padding
以及该行的其他任何属性。如果您无法直接从CheckBox
访问Style
,那么您可以尝试添加bool
属性以绑定Checkbox.IsChecked
属性和 DataTrigger.Binding
属性。或者只是用自己的方法管理Rectangle.Visibility
。