我在尝试让 GroupBox 折叠时遇到问题。我想要一个 GroupBox,如果它的所有子项都折叠了,它就会折叠。
我已经设法通过对属性进行多重绑定(bind)来实现这一点,如下所示。
<StackPanel>
<GroupBox>
<GroupBox.Visibility>
<MultiBinding
Converter="{StaticResource multiBoolOrToVis}"
ConverterParameter="{x:Static Visibility.Collapsed}"
>
<Binding Path="a_visible"/>
<Binding Path="b_visible"/>
</MultiBinding>
</GroupBox.Visibility>
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label
Content="A"
Visibility="{Binding Path=a_visible, Converter={StaticResource boolToVis}}"
/>
<Label
Content="B"
Visibility="{Binding Path=b_visible, Converter={StaticResource boolToVis}}"
/>
</StackPanel>
</GroupBox>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox
Content="A Visible"
Grid.Column="0"
Grid.Row="1"
IsChecked="{Binding Path=a_visible, Mode=TwoWay}"
/>
<CheckBox
Content="B Visible"
Grid.Column="1"
Grid.Row="1"
IsChecked="{Binding Path=b_visible, Mode=TwoWay}"
/>
</Grid>
</StackPanel>
这样做的问题是我们希望能够多次执行此操作而不用担心遗漏绑定(bind)。所以我的问题是有什么方法可以通用地执行此操作,最好是采用一种样式。另一个要求是它必须在 xaml 而不是代码隐藏中。
所以我理想的答案是一种样式,这样我就可以在我的 xaml 中执行以下操作。
<StackPanel>
<GroupBox Style="ChildrenVisibilityStyle">
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label
Content="A"
Visibility="{Binding Path=a_visible, Converter={StaticResource boolToVis}}"
/>
<Label
Content="B"
Visibility="{Binding Path=b_visible, Converter={StaticResource boolToVis}}"
/>
</StackPanel>
</GroupBox>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox
Content="A Visible"
Grid.Column="0"
Grid.Row="1"
IsChecked="{Binding Path=a_visible, Mode=TwoWay}"
/>
<CheckBox
Content="B Visible"
Grid.Column="1"
Grid.Row="1"
IsChecked="{Binding Path=b_visible, Mode=TwoWay}"
/>
</Grid>
</StackPanel>
我看过这些问题,它们让我认为这是不可能的; binding in controltemplate , stackpanel visibility , border visibility .
抱歉,如果之前已经回答过这个问题。预先感谢您的任何回答/评论。
最佳答案
您可以使用 MultiDataTrigger
在折叠子项时折叠 GroupBox
这是一个工作示例:
<StackPanel>
<GroupBox>
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label x:Name="lbl_a" Content="A" Visibility="{Binding IsChecked, ElementName=chk_a, Converter={StaticResource boolToVis}}" />
<Label x:Name="lbl_b" Content="B" Visibility="{Binding IsChecked, ElementName=chk_b, Converter={StaticResource boolToVis}}" />
</StackPanel>
<GroupBox.Style>
<Style TargetType="GroupBox">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Visibility, ElementName=lbl_a}" Value="Collapsed" />
<Condition Binding="{Binding Visibility, ElementName=lbl_b}" Value="Collapsed" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="GroupBox.Visibility" Value="Collapsed" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</GroupBox.Style>
</GroupBox>
<CheckBox x:Name="chk_a" Content="A Visible" Grid.Column="0" Grid.Row="1" />
<CheckBox x:Name="chk_b" Content="B Visible" Grid.Column="1" Grid.Row="1" />
</StackPanel>
关于c# - 您可以将 GroupBox 的可见性绑定(bind)到它的子项的可见性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900255/