在扩展器展开时扩展网格

时间:2018-08-08 06:08:36

标签: c# wpf expander

在wpf中设计GUI时遇到问题。 如何动态设置“网格列定义宽度”,

我有一个扩展器。单击扩展器时,网格也应扩展并根据扩展器的大小进行调整

到目前为止,我已经有了这个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。因此窗口将填充其他内容

像这样

enter image description here

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

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

非常感谢。对不起,我的英语不好

1 个答案:

答案 0 :(得分:0)

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

在扩展器中,您也只能有一个用户控件,因此您说的“东西”需要放在某些布局控件中,例如堆栈面板,停靠区或其他网格等。

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