结合扩展器和网格(可调整大小的扩展器)

时间:2011-04-05 14:19:24

标签: wpf xaml grid expander gridsplitter

我想要一个像可调整大小的扩展器。我的基本想法是这样的:

<Grid HorizontalAlignment="Left">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="2" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Expander Grid.Column="0" ExpandDirection="Right">
          ...
    </Expander>

    <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />

    ...
</Grid>

这个问题:如果我移动网格分割器并折叠扩展器,我有一个很大的空白区域。如何使整个列崩溃?或者是否有另一种方法可以使扩展器“可调整大小”

2 个答案:

答案 0 :(得分:20)

不确定您要完成的是什么,但我认为概念上Grid应该是Expander.Content的一部分,这对您有用吗?

<Expander Header="Test" ExpandDirection="Right" HorizontalAlignment="Left" Background="LightBlue">
    <Expander.Content>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="5"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Lorem ipsum dolor sit"/>
            <GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
        </Grid>
    </Expander.Content>
</Expander>

修改:删除了第一列中的所有触发,因为它似乎没必要。

另外:为了使其垂直工作,GridSplitter的HorizontalAlignment必须设置为Stretch,否则默认情况下它的宽度为零(当然,所有其他特定方向的设置也必须进行调整但这很简单)

  

Horizo​​ntalAlignment是Microsoft .NET属性访问器,实际上是依赖项属性。这种特定的依赖属性经常在子类元素(尤其是控件)中以不同的方式设置其明显的“默认”值。 [...]例如,Label控件的Horizo​​ntalAlignment的明显“默认”将为Left,即使Label直接从FrameworkElement继承Horizo​​ntalAlignment。这是因为该值在样式的控件模板中的Label默认样式中重置。

答案 1 :(得分:1)

也许这有助于解决您的“列崩溃”问题

XAML:

添加<Grid> Name="expGrid"并添加<Expander> Collapsed="Expander_Collapsed"

C#代码:

private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
  var colomnIndex = Grid.GetColumn(sender as Expander);
  var colomn = expGrid.ColumnDefinitions[colomnIndex];
  colomn.Width = GridLength.Auto;
}