可调整大小的扩展器上的最小高度



我正在尝试创建一种样式,通过使用网格分配器将内容嵌入网格中,自动使所有扩展器的大小可调整。

<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}就可以达到所需的效果。

下一步:弄清楚如何记忆和恢复高度:)

最新更新