如何防止WPF GridSplitter改变网格的大小?

Zac*_*son 6 .net wpf grid xaml

WPF GridSplitter让我的网格比我的窗口宽!

我有一个带有GridSplitter的WPF网格.如果我调整列的大小,那么我可以使网格比窗口宽,不可见.

它是这样开始的:

WPF网格http://img201.imageshack.us/img201/9505/onehg6.jpg

但在扩大左栏后,我再也看不到右栏(绿色):

WPF GridSplitter http://img201.imageshack.us/img201/1804/twomy6.jpg

我究竟做错了什么?如何防止GridSplitter改变网格的大小?


更新:

我还在努力解决这个问题.我现在尝试在网格中嵌套网格.这没有用.这是我的XAML ColumnDefinitions,RowDefinitions和GridSplitters ......

<Window ... >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="150" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" MinWidth="400" />
        </Grid.ColumnDefinitions>
        <GridSplitter 
            ResizeDirection="Columns"
            ResizeBehavior="BasedOnAlignment"
            Grid.Column="1"
            HorizontalAlignment="Center"
            VerticalAlignment="Stretch"
            Width="2"
            Margin="0,5,0,5"
            Panel.ZIndex="1"/>
        <Grid Grid.Column="0">
            ...
        </Grid>
        <Grid Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" MinWidth="150" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" MinWidth="200" />
            </Grid.ColumnDefinitions>
            <GridSplitter 
                ResizeDirection="Columns"
                ResizeBehavior="PreviousAndNext"
                Grid.Column="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Stretch"
                Width="2"
                Margin="0,5,0,5"
                Panel.ZIndex="1"/>
            <Grid Grid.Column="0">
                ...
            </Grid>
            <Grid Grid.Column="2">
                ...
            </Grid>
        </Grid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

更新:

我认为问题在于WebBrowser控件.看到新问题:

WPF GridSplitter不能与WebBrowser控件一起使用?

Abe*_*cht 7

尝试将宽度更改为星号.这将导致拆分器仅调整其所在的列的大小,因此不确定这是否是您所需的行为.但是,对于星号,内容不会超出窗口的范围.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" MinWidth="100" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" MinWidth="50" />
        <ColumnDefinition Width="2*" MinWidth="100" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="3*" MinWidth="150" />
    </Grid.ColumnDefinitions>
    <GridSplitter 
        ResizeDirection="Columns"
        Grid.Column="1"
        Grid.RowSpan="8"
        HorizontalAlignment="Center"
        VerticalAlignment="Stretch"
        Width="2"
        Margin="0,5,0,5"
        Panel.ZIndex="1"/>
    ...
</Grid>
Run Code Online (Sandbox Code Playgroud)


Rob*_*nee 4

如果您的Window大小被调整,使其Width小于您的列的总和' MinWidth,您会看到列被切断,但否则我无法重现您的问题:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="150" Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition MinWidth="400" Width="*"/>
        </Grid.ColumnDefinitions>

        <GridSplitter
            Width="2"
            Grid.Column="1"
            HorizontalAlignment="Center"
            Margin="0,5,0,5"
            Panel.ZIndex="1"
            VerticalAlignment="Stretch"
            ResizeBehavior="BasedOnAlignment"
            ResizeDirection="Columns"/>

        <Grid Grid.Column="0">
            <Border Background="Red" Margin="5"/>
        </Grid>

        <Grid Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="150" Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition MinWidth="200" Width="*"/>
            </Grid.ColumnDefinitions>

            <GridSplitter
                Width="2"
                Grid.Column="1"
                HorizontalAlignment="Center"
                Margin="0,5,0,5"
                Panel.ZIndex="1"
                VerticalAlignment="Stretch"
                ResizeBehavior="PreviousAndNext"
                ResizeDirection="Columns"/>

            <Grid Grid.Column="0">
                <Border Background="Green" Margin="5"/>
            </Grid>

            <Grid Grid.Column="2">
                <Border Background="Blue" Margin="5"/>
            </Grid>
        </Grid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

展开红色列,它只会展开到右侧列达到MinWidth400 为止,不会将其引导出页面。

您可能正在设置Window或最外层的其他属性Grid,这会导致此行为......