C# 结合WPF扩展器和GridSplitter以及MinHeight
如何将C# 结合WPF扩展器和GridSplitter以及MinHeight,c#,wpf,C#,Wpf,如何将GridSplitter和扩展器很好地结合起来,同时考虑GridSplitter上/下两个区域的MinHeight 例如: <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" MinHeight="200" /> <!-- Main --> <RowDefinition Height="Auto" />
GridSplitter
和扩展器
很好地结合起来,同时考虑GridSplitter上/下两个区域的MinHeight
例如:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="200" /> <!-- Main -->
<RowDefinition Height="Auto" /> <!-- GridSplitter -->
<RowDefinition Height="Auto" /> <!-- Expander -->
</Grid.RowDefinitions>
<ListBox>
<ListBoxItem>A</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
<GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" />
<Expander Grid.Row="2" Header="Expander" IsExpanded="False">
<ListBox MinHeight="150">
<ListBoxItem>X</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
</Expander>
</Grid>
A.
...
X
...
如果我省略了扩展器
,网格拆分器
工作良好,并且尊重两行定义的最小高度
如果我省略了GridSplitter
(并将第二个MinHeight
移动到秒行定义),则扩展器可以正常工作
但是当两者都使用时,MinHeight
不受尊重,而Expander
就不再有效了
是否有简单的修复方法?在行定义上设置一个触发器,根据扩展器状态更改最小高度
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="200" />
<!-- Main -->
<RowDefinition Height="Auto" />
<!-- GridSplitter -->
<RowDefinition Height="Auto" >
<RowDefinition.Style>
<Style TargetType="{x:Type RowDefinition}">
<Setter Property="MinHeight" Value="150" /> <!-- Default MinHeight -->
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyExpander, Path=IsExpanded}" Value="False">
<Setter Property="MinHeight" Value="24" /> <!-- MinHeight when Collapsed -->
<Setter Property="MaxHeight" Value="24" />
</DataTrigger>
</Style.Triggers>
</Style>
</RowDefinition.Style>
</RowDefinition>
<!-- Expander -->
</Grid.RowDefinitions>
<ListBox>
<ListBoxItem>A</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
<GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" />
<Expander x:Name="MyExpander" Grid.Row="2" Header="Expander" IsExpanded="False">
<ListBox>
<ListBoxItem>X</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
</Expander>
</Grid>
A.
...
X
...
默认情况下,行的最小高度将为150,但是当扩展器关闭时,它的最小高度和最大高度都将设置为24(默认扩展器的高度),强制其高度保持在最小值。我将XAML粘贴到测试项目中,它似乎工作正常,使用拆分器可以调整两个控件的大小,然而,两者都不低于其最小高度。还有其他因素影响它吗?@Rachel我稍微更改了XAML示例,以使问题/期望的行为更清楚。当扩展器崩溃时,我希望第2行“消失”。当扩展器打开时,我希望拆分器调整第2行的大小,但不要使其太小。很好,但不幸的是,移动拆分器后折叠扩展器仍然无法重置第2行。(拆分器仍然可以调整折叠扩展器的行大小。)@Peter如果希望在行折叠时强制调整行的大小,请使用DataTrigger设置MaxHeight
属性。在这种情况下,最简单的方法可能是反转触发器,并将默认属性设置器设置为扩展的大小写,而将触发器设置为折叠的大小写。如果需要,我可以更新我的示例。修复不匹配的ElementName=parentExpander
/x:Name=“MyExpander”后效果良好
当扩展器
未展开时,同样的技术也可以很好地将GridSplitter
可见性
设置为折叠
。问题:即使拆分器达到最大高度,行内的控件仍会无限增长。