我正在尝试创建一种样式,通过使用网格分配器将内容嵌入网格中,自动使所有扩展器的大小可调整。
<Window.Resources>
<Style TargetType="Expander">
<Setter Property="Background" Value="Gold"/>
<Setter Property="FontSize" Value="17"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Margin="0" Background="Red">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="{Binding ???}"/>
<RowDefinition Height="5"/>
</Grid.RowDefinitions>
<ContentControl Content="{Binding}" MinHeight="{Binding ???}"/>
<GridSplitter Grid.Row="1" Height="5" Background="Green"
HorizontalAlignment="Stretch"
ResizeBehavior="PreviousAndCurrent"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Expander Grid.Row="0" IsExpanded="True" Header="Expander...">
<Border Background="Blue" MinHeight="200" BorderThickness="5" BorderBrush="Black"/>
</Expander>
<Expander Grid.Row="1" IsExpanded="True" Header="Expander...">
<Border Background="Blue" MinHeight="100" BorderThickness="5" BorderBrush="Black"/>
</Expander>
</Grid>
我无法弄清楚的是如何将样式内部 RowDefinition(或 ContentControl)的 MinHeight 绑定到扩展器内容的 MinHeight。
(注意,花哨的颜色只是为了看看什么是什么...
我不确定您需要它,以及是否可以解决您的问题:
<Grid.RowDefinitions>
<RowDefinition x:Name="GridRowDefinition" Height="Auto" MinHeight="20"/>
<RowDefinition x:Name="GridRowDefinition2" Height="Auto" MinHeight="20"/>
</Grid.RowDefinitions>
并在风格上
<Setter.Value>
<DataTemplate>
<Grid Margin="0" Background="Red">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="{Binding MinHeight, ElementName=GridRowDefinition}"/>
<RowDefinition Height="5"/>
</Grid.RowDefinitions>
<ContentControl Content="{Binding}" MinHeight="{Binding MinHeight, ElementName=GridRowDefinition2}"/>
<GridSplitter Grid.Row="1" Height="5" Background="Green"
HorizontalAlignment="Stretch"
ResizeBehavior="PreviousAndCurrent"/>
</Grid>
</DataTemplate>
</Setter.Value>
因为我不明白如果在扩展器内添加边框,为什么要将内容放在扩展器中。我希望它有所帮助
我:查看调试输出表明{Binding}
与内容有关(在本例中为边框)。因此,简单地在 RowDefinition(在 Style.DataTemplate 内部)上执行{Binding MinHeight}
就可以达到所需的效果。
下一步:弄清楚如何记忆和恢复高度:)