【问题标题】:WPF GridSplitter Doesn't Work With WebBrowser Control?WPF GridSplitter 不适用于 WebBrowser 控件?
【发布时间】:2008-12-17 20:03:42
【问题描述】:

我一直是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. 将窗口的右边缘向左拖到最远。

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

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

【问题讨论】:

    标签: .net wpf xaml grid


    【解决方案1】:

    我能够在 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。

    【讨论】:

      【解决方案2】:

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

      (XAML 代码受到质疑。)

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

      【讨论】:

      • 谢谢。但是,对于您的 XAML 和空白 xaml.vb 文件,问题仍然存在。
      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2020-01-07
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多