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 数据网格光标在列调整大小时不会改变的主要内容,如果未能解决你的问题,请参考以下文章