展开 Expander 时用 展开 Grid

Expand the Grid with when the Expander is expanded

我在 wpf 中设计 GUI 时遇到问题。 我如何动态设置网格 ColumnDefinition 宽度,

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

截至目前我有这个 GUI

enter image description here

这是 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。所以 window 将填充其他东西

像这样

enter image description here

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

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

非常感谢。抱歉我的英语不好

在第一列宽度中使用自动,它将根据内容定义扩展器的大小。 如果您希望“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"/>

同样在扩展器中你只能有一个用户控件,所以"stuff"你说需要在一些布局控件中,比如堆栈面板、停靠栏或另一个网格等。

让我知道它是否如您所愿。