首页 > 解决方案 > 扩展器扩展时扩展网格

问题描述

我在 wpf 中设计我的 GUI 时遇到问题。如何动态设置 Grid ColumnDefinition Width,

我有一个扩展器。当点击扩展器时,网格也应该随着扩展器的大小进行扩展和调整

到目前为止,我有这个 GUI

在此处输入图像描述

这是xaml代码

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="127"/>
            <ColumnDefinition Width="665*"/>
        </Grid.ColumnDefinitions>
        <Expander Background="Gray" x:Name="expander" ExpandDirection="Right" Expanded="Expander_Expanded" >
            <Expander.Header>
                <TextBlock Text="Objects">
                    <TextBlock.LayoutTransform>
                        <RotateTransform Angle="-90"/>
                    </TextBlock.LayoutTransform>
                </TextBlock>
            </Expander.Header>

            <StackPanel Margin="10,4,0,0">
                <CheckBox Margin="4" Content="Option 1" />
                <CheckBox Margin="4" Content="Option 2" />
                <CheckBox Margin="4" Content="Option 3" />
            </StackPanel>
            <!-- Stuff XD -->

        </Expander>
        <Grid Grid.Column="1" Background="Red"/>

    </Grid>

截至目前,ColomnDefinition 宽度为 127

我希望它至少调整到 30。所以窗口会被其他东西填满

像这样

在此处输入图像描述

但我的问题是扩展器扩展时如何扩展网格。

还有一件事。扩展时我无法获得扩展器的大小。它给了我NaN我不能用来设置 columndefinition 宽度

太感谢了。对不起,我的英语不好

标签: c#wpfexpander

解决方案


在第一列宽度中使用自动,它将根据内容定义扩展器的大小。如果您希望该列“0”具有一些最小宽度,只需设置属性 MinWidth。(但在那种情况下我不会推荐,但在下面显示)

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" MinWidth="30"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

另外我会推荐使用 GridSplitter,然后你将在两列之间有拆分器,允许用户在 UI 中更改列的宽度

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" MinWidth="30"/>
    <ColumnDefinition Width="5"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="DarkSalmon"/>

同样在扩展器中,您只能拥有一个用户控件,因此您所说的“东西”需要位于一些布局控件中,例如堆栈面板、码头或另一个网格等。

让我知道它是否按您的预期工作。


推荐阅读