如何在尊重GridSplitter
上方/下方两个区域MinHeight
的同时,很好地组合GridSplitter
和Expander
?
例如:
<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>
如果我省略Expander
,GridSplitter
运行良好,并且尊重两行定义的MinHeight
。
如果我省略GridSplitter
(并将第二个MinHeight
移动到第二行定义(,则Expander
运行良好。
但是当两者都使用时,MinHeight
就不被尊重了,Expander
就不再真正起作用了。
有没有简单的解决方法?
在RowDefinition
上设置一个触发器,该触发器根据扩展器状态更改MinHeight
。
<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>
默认情况下,行的最小高度将为 150,但是当扩展器关闭时,它将最小和最大高度设置为 24(默认扩展器的高度(,强制其高度保持在最小值。