WPF listview/gridsplitter/scrollviewer调整大小问题

Dav*_*veO 6 wpf gridsplitter

我有一个问题,gridsplitter将我的listview推出这个组合中的视图.重现步骤:

  • 启动程序,拖动窗口大小更大
  • 将红色分离器一直向左拖动以最小化蓝色列
  • 扩展两个ListView列,直到它们在视口外部并显示水平滚动
  • 再次将窗口大小拖动

对我来说,这会慢慢推动WindowView外的ListView.请注意,ScrollViewer实际上随着窗口的大小减小,但速度不同且慢慢消失.一旦滚动查看器开始滑出视图,分割器就不能再使用了!

奇怪的是,如果我不首先最小化左侧面板,我不会得到这种行为!

对此有什么解决方法?

<Window x:Class="LayoutTest3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="600" Width="800" MinHeight="600" MinWidth="800" >
    <Window.Resources>
        <XmlDataProvider XPath="/Celebrities/Celebrity" x:Key="celebs">
            <x:XData>
                <Celebrities xmlns="">
                    <Celebrity Name="Jimmy">
                        <LastName>Page</LastName>
                    </Celebrity>
                    <Celebrity Name="Johnny">
                        <LastName>Depp</LastName>
                    </Celebrity>
                    <Celebrity Name="Britney">
                        <LastName>Spears</LastName>
                    </Celebrity>
                </Celebrities>
            </x:XData>
        </XmlDataProvider>

        <DataTemplate x:Key="NameTemplate">
            <TextBlock Text="{Binding XPath=@Name}" />
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="100" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" MinWidth="400" />
        </Grid.ColumnDefinitions>
        <Border Grid.Column="0" Background="Blue" />
        <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" />
        <Border Grid.Column="2" Background="Green">
            <ListView ItemsSource="{Binding Source={StaticResource celebs}}">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn Header="Name" CellTemplate="{StaticResource NameTemplate}" Width="150" />
                            <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding XPath=LastName}" />
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>
        </Border>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

Aka*_*ava 7

GridSplitter和MinWidth列有一个已知问题,GridSplitter仍然调整了Grid的大小,忽略了Column的MinWidth.结果就是不断增长的专栏儿童获得的实际可用尺寸更大.但Grid格式的孩子考虑MinWidth,因此你的收缩列保持在MinWidth但是Growing Column的孩子超出了GridSplitter超出缩小列的MinWidth的大小.

我将在我的项目之一中找出如何解决这个问题,我将发布代码.同时您可以尝试以下选项.

  1. 从ColumnDefinition中删除MinWidth
  2. 将MinWidth添加到Child

事先知道Grid的最小尺寸应为500 + Splitter尺寸,您可以设置整个网格的MinWidth.