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

时间:2008-12-17 20:03:42

标签: .net wpf xaml grid

我一直struggling with the GridSplitter。它似乎与WPF WebBrowser控件不兼容。

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

在:

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

之后:(注意滚动条)

WPF GridSplitter WebBrowser After 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. 将窗口的右边缘向左拖动到目前为止。
  4. 如何防止GridSplitter更改网格的大小超出Window可以包含的范围?

    有谁知道更多关于这个问题? ......或者有一个解决方法?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

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

( XAML code moved into question. )

您的代码隐藏中是否会出现导致该行为的内容?