与scrollviewer和minWidth结合使用时,gridsplitter的行为不符合预期

Dav*_*vid 2 wpf scrollviewer gridsplitter

  • 我有一个网格作为背景容器
  • 此网格包含一个scrollviewer,因此当我调整窗口向上的大小时,内容随之扩展,但是当我调整窗口向下的大小时,当我到达sv内容的minWidth时,滚动条将出现在scrollviewer上
  • 此scrollviewer包含具有两列的网格
  • 此网格在每一列中包含一个scrollviewer,每个滚动视图又包含一个网格。
  • 我在第一列上有一个网格拆分器,以便可以调整列的大小

免责声明:我知道这不是组织此布局的最佳方法,但这实际上是我发现的最简单的表示形式,它再现了我在更为精细的布局中遇到的问题,因此请不要提供会重新组织图层的解决方案

这是xaml:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

    <!--background grid-->
    <Grid>

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/>
                </ScrollViewer>

                <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="6"/>

                <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Blue"/>
                </ScrollViewer>
            </Grid>

        </ScrollViewer>

    </Grid>

</Window>
Run Code Online (Sandbox Code Playgroud)

目标如下:-如果我将窗口调大,一切都会缩放-如果我调小,当我达到minWidth时,最顶部的滚动查看器上的scroolbar出现,并且其内容停止缩小。(这部分工作正常)-不管最顶部的scrollviewer的大小如何,我都可以使用gridsplitter调整两列的大小-当我达到一列的最小宽度时,滚动条将出现在该列的scrollviewer上,并且其内容停止缩小

问题:第二部分永远不会发生。我得到的是可以调整大小,直到达到两个子网格的minWidth之一,然后网格分割器停止移动,无法进一步缩小并且滚动条永远不会出现。

我注意到,如果删除最上面的网格及其关联的scrollviewer,它将按预期工作:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/>
                </ScrollViewer>

                <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="6"/>

                <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Blue"/>
                </ScrollViewer>
            </Grid>

</Window>
Run Code Online (Sandbox Code Playgroud)

我不明白为什么将内部网格放入滚动查看器的事实会改变网格拆分器和内部滚动查看器的行为,所以我知道解决方案,我会很高兴

Eir*_*rik 5

尝试Width将两列的绑定GridActualWidth外部的ScrollViewer,如下所示:

<!--two columns layout-->
<Grid MinWidth="600" Width="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer}, Path=ActualWidth}">
Run Code Online (Sandbox Code Playgroud)