1

我一直在为 GridSplitter 苦苦挣扎。它似乎与 WPF WebBrowser 控件不兼容。

如果我调整我的窗口大小并移动 GridSplitter,那么我可以使我的网格比我的窗口更宽并且不可见。

前:

WPF GridSplitter WebBrowser 之前 http://img239.imageshack.us/img239/4061/grid1vn8.gif

之后:(注意滚动条)

WPF GridSplitter WebBrowser http://img101.imageshack.us/img101/4303/grid2so0.gif 之后

我的 XAML...

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        MinWidth="450"
        Width="450"
        Height="300"
        Title="Window3">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="200" Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition MinWidth="200" Width="*"/>
        </Grid.ColumnDefinitions>
        <Button Name="Button2"
                Grid.Column="0"
                Margin="5"
                Content="Button2"/>
        <GridSplitter
            Width="2"
            Grid.Column="1"
            HorizontalAlignment="Center"
            Margin="5"
            Panel.ZIndex="1"
            VerticalAlignment="Stretch"
            ResizeBehavior="PreviousAndNext"
            ResizeDirection="Columns"/>
        <WebBrowser
            Grid.Column="2"
            Margin="5"
            Source="http://www.google.com"/>
    </Grid>
</Window>

重现问题的步骤...

  1. 将窗口的右边缘向右拖动到其宽度的两倍左右
  2. 将拆分器向左拖到最远
  3. 将窗口的右边缘向左拖到最远。

如何防止 GridSplitter 将我的 Grid 的大小更改为 Window 可以包含的大小?

有谁知道更多关于这个问题的信息?...或有解决方法?

4

2 回答 2

3

我能够在 ScrollViewer 中使用 Border 来重现这一点(但不是没有 ScrollViewer),所以我的猜测是滚动会以某种方式把它弄乱。

在左列上设置 MaxWidth (一个非常大的 MaxWidth 应该没有实际效果)似乎可以解决它:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300"
        MinWidth="450"
        Width="450"
        Title="Window3">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="200" Width="*" MaxWidth="10000"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition MinWidth="200" Width="*"/>
        </Grid.ColumnDefinitions>
        <Button
            Name="Button2"
            Grid.Column="0"
            Margin="5"
            Content="Button2"/>
        <GridSplitter
            Width="2"
            Grid.Column="1"
            HorizontalAlignment="Center"
            Margin="5"
            Panel.ZIndex="1"
            VerticalAlignment="Stretch"
            ResizeBehavior="PreviousAndNext"
            ResizeDirection="Columns"/>
        <WebBrowser Grid.Column="2" Margin="5" Source="http://www.google.com"/>
    </Grid>
</Window>

似乎在某些时候,星型大小会覆盖没有剩余空间的事实,因此当左列达到 Width = 200,并且 GridSplitter 已将右列的星型大小更改为 3* 左右时,该列将是否有空间是600。

于 2008-12-17T23:50:21.377 回答
1

我知道你可能已经厌倦了听到这个,但是当我使用上面的 XAML 时,我无法重现你的问题,稍微修改为纯 XAML:

(XAML 代码受到质疑。)

您的代码隐藏中是否存在导致该行为的内容?

于 2008-12-17T20:53:15.743 回答