2010-07-06 59 views
1

请让我们专注于水平尺寸(宽度)。如何使WPF Grid可扩展?

我有水平的StackPanel自动调整大小以占用空间(它“展开”)。其中我有网格(3列)和一个滚动条。滚动条宽度应该是固定的,但网格应该展开。我如何强迫它做到这一点?

当前代码:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 
    <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 

    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 

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

    </Grid.ColumnDefinitions> 

    <StackPanel Orientation="Vertical" Grid.Column="0" HorizontalAlignment="Stretch"> 
    <Label Content="Label" HorizontalAlignment="Center" Name="label1" VerticalAlignment="Bottom" /> 
    </StackPanel> 
    <GridSplitter DragCompleted="OnDragCompleted" ShowsPreview="True" Name="gridsplitter1" Background="Red" Grid.Column="1" Grid.Row="0" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    <StackPanel Orientation="Vertical" Grid.Column="2" HorizontalAlignment="Stretch"> 
    <Label Content="Label" HorizontalAlignment="Center" Name="label2" VerticalAlignment="Bottom" /> 
    </StackPanel> 

    </Grid> 

    <ScrollBar Name="scrollBarV" Orientation="Vertical" /> 

</StackPanel> 

不管我做什么,宽度=汽车,的Horizo​​ntalAlignment = STRECH,每个网格的每个列只占所需的空间(足够显示其内容)的时间,而不是整个可用空间。

回答

3

一个水平的StackPanel总会给它的孩子他们所需的宽度,所以它永远不会迫使格来比想要的大。您将需要使用不同类型的面板。一种选择是使用DockPanel中,并停靠滚动条到右边,让电网填补了休息:

<DockPanel HorizontalAlignment="Stretch"> 
    <ScrollBar DockPanel.Dock="Right" Name="scrollBarV" Orientation="Vertical" /> 
    <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     ... 
    </Grid> 
</DockPanel> 

另一种选择是使用网格,使用自动大小的滚动条完全第二列第一列保留为默认值1 *以使用其余空格:

<Grid HorizontalAlignment="Stretch"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     ... 
    </Grid> 
    <ScrollBar Grid.Column="1" Name="scrollBarV" Orientation="Vertical" /> 
</Grid> 
+0

精美的作品,非常感谢! – greenoldman 2010-07-07 06:10:43

1

尝试

<ColumnDefinition Width="*"></ColumnDefinition> 

列和行被一个网格内定义可以采取Star上浆的优点来分发比例剩余空间。当选择Star作为行或列的高度或宽度时,该列或行将接收剩余可用空间的加权比例。这与Auto不同,后者根据列或行内的内容大小均匀分配空间。当你使用这个值表示为*或2 *可扩展应用程序标记语言(XAML)

Source

+0

谢谢您指出,我以某种方式确信Auto = *。 – greenoldman 2010-07-07 06:10:25