You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid调整列宽时分隔线处鼠标指针未切换为SizeWE光标问题

场景1:鼠标悬停列分隔线光标不切换,但可正常拖拽调整列宽

  • 优先排查项目内是否存在全局隐式DataGridColumnHeader样式:即使你没有给当前DataGrid单独设置样式,项目中定义的无Key、TargetType为DataGridColumnHeader的样式如果没有指定Cursor属性,就会覆盖系统默认的光标规则,导致悬停时不显示双向箭头。可以手动给当前DataGrid补充列头样式强制指定光标:
<DataGrid>
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Cursor" Value="SizeWE"/>
        </Style>
    </DataGrid.ColumnHeaderStyle>
    <!-- 原有列定义 -->
</DataGrid>
  • 排查列头区域是否被上层透明控件拦截:如果有IsHitTestVisible="True"的透明控件叠在DataGrid列头上,会拦截鼠标光标判定,但拖拽事件仍可透传,就会出现你遇到的现象。可以用Visual Studio自带的实时可视化树工具,悬停在列分隔线位置,查看当前命中的控件是否为DataGridColumnHeader即可定位问题。

场景2:添加自定义Button样式后完全无法调整列宽

你提供的代码中存在布局层级错误:DataGrid和ScrollViewer都被设置为Grid.Row="1",两个控件堆叠在同一个Grid单元格内,ScrollViewer默认背景透明,视觉上看不到,但会完全拦截下方DataGrid的所有鼠标操作,所以无法调整列宽。和你设置的Button样式没有直接关联,你可以验证:临时把ScrollViewer注释后,DataGrid的列宽调整功能就会恢复。
解决方法可以二选一:

  1. 调整ScrollViewer的行号,放到独立的Grid行,比如Grid.Row="2",避免和DataGrid堆叠
  2. 把DataGrid移到ScrollViewer内部,同时承载原有的grid_content内容:
<ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    <StackPanel>
        <DataGrid>
            <!-- 原有列定义 -->
        </DataGrid>
        <Grid x:Name="grid_content" Height="Auto" Width="Auto">
            <!-- 原有内容 -->
        </Grid>
    </StackPanel>
</ScrollViewer>

如果调整布局后仍存在问题,再排查你的ModernButtonTheme样式是否存在作用域溢出:如果样式中错误设置了全局的控件命中测试、光标规则,或者继承了错误的基类样式,也可能影响到DataGrid的默认行为,可以临时删除Button的Style属性验证是否恢复。

内容的提问来源于stack exchange,提问作者ds600

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:03