WPF 数据网格光标在列调整大小时不会改变

Posted

技术标签:

【中文标题】WPF 数据网格光标在列调整大小时不会改变【英文标题】:WPF datagrid cursor doesn't change on column resize 【发布时间】:2021-12-23 23:20:40 【问题描述】:

我遇到了一个我无法找出来源的错误,所以我想问一下是否有人遇到过类似的事情。 设置很简单:

        <Grid>
            <DataGrid>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Test1" Width="100"/>
                    <DataGridTextColumn Header="Test2" Width="100"/>
                    <DataGridTextColumn Header="Test3" Width="100"/>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>

在数据网格之后当然还有更多代码,但我绝不会实现任何样式或主题,也不会以任何方式、形状或形式与数据网格进行交互,并且包含所有代码将是很多代码。 当我将鼠标悬停在列之间的分割线上时,鼠标光标不会变为带有 2 个箭头(Cursors.SizeWE)的调整大小光标。 如果我单击并拖动并在任何其他方面按预期工作,它仍然可以正常工作和调整大小。

在此设置中,我有一个样式,但仅适用于我的按钮,在这里它根本无法调整大小:

<Grid x:Name="grid_main" Height="Auto" Width="Auto" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>


        <DataGrid Grid.Row="1">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Test1" Width="100"/>
                <DataGridTextColumn Header="Test2" Width="100"/>
                <DataGridTextColumn Header="Test3" Width="100"/>
            </DataGrid.Columns>
        </DataGrid>

        <DockPanel Width="Auto" Height="Auto">
            <Button x:Name="btn_loadSchema" Content="Load Schema" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left" 
                        Margin="5" Click="LoadSchema" Style="StaticResource ModernButtonTheme"/>
            <Button x:Name="btn_loadJSON" Content="Load JSON" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left"
                        Margin="5" Click="LoadJSON" Style="StaticResource ModernButtonTheme" IsEnabled="False"/>
            <Button x:Name="btn_saveJSON" Content="Save JSON" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left"
                        Margin="5" Click="SaveJSON" Style="StaticResource ModernButtonTheme" IsEnabled="False"/>
            <Label/>
        </DockPanel>

        <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Grid x:Name="grid_content" Height="Auto" Width="Auto">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            </Grid>
         </ScrollViewer>
    </Grid>

【问题讨论】:

【参考方案1】:

您是否尝试将您的第一个 XAML sn-p 复制到一个空白 WPF 项目中?那你能重现这个问题吗?我怀疑它,因为我不能。

对于您的第二个 sn-p,您应该删除 ScrollViewer 或通过将另一个 RowDefinition 添加到 Grid 并增加 Grid.Row 附加属性的值来将其移动到另一行。目前,它位于DataGrid 之上。

试试这个:

<Window ...>
    <Grid x:Name="grid_main" Height="Auto" Width="Auto" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>


        <DataGrid x:Name="dg" Grid.Row="1">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Test1" Width="100"/>
                <DataGridTextColumn Header="Test2" Width="100"/>
                <DataGridTextColumn Header="Test3" Width="100"/>
            </DataGrid.Columns>
        </DataGrid>

        <DockPanel Width="Auto" Height="Auto">
            <Button x:Name="btn_loadSchema" Content="Load Schema" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left" 
                        Margin="5" />
            <Button x:Name="btn_loadJSON" Content="Load JSON" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left"
                        Margin="5" IsEnabled="False"/>
            <Button x:Name="btn_saveJSON" Content="Save JSON" Grid.Row="0" Height="20" Width="85" DockPanel.Dock="Left"
                        Margin="5" IsEnabled="False"/>
            <Label/>
        </DockPanel>
    </Grid>
</Window>

【讨论】:

以上是关于WPF 数据网格光标在列调整大小时不会改变的主要内容,如果未能解决你的问题,请参考以下文章

WPF 网格 — 按特定顺序调整列的大小

如何使wpf数据网格填充所有可用空间并使用窗口调整大小?

WPF:调整图像大小,但仅在用户调整UI大小时

具有布局适合和网格的 Extjs 3.3.1 FieldSet 在窗口调整大小时不会调整网格大小

WPF 不需要的网格拆分器行为

WPF 自动调整字体大小,直到它适合父控件