如何永久更改WPF GridViewColumnHeader夹持器光标?
我可以在Loaded、Initialized、MouseEnter事件处理程序中将其更改为SizeWE,但在调整列大小后,它会更改回默认值。尝试在MouseUp或DragCompleted事件处理程序中将其更改为SizeWE不起作用。当鼠标按钮在“调整大小”结束时释放时,光标将更改为默认值。在MouseEnter处理程序中完成SizeWE更改后,当鼠标退出并再次进入时,仍然可以,但问题就在调整大小之后 xaml:如何永久更改WPF GridViewColumnHeader夹持器光标?,wpf,xaml,controltemplate,Wpf,Xaml,Controltemplate,我可以在Loaded、Initialized、MouseEnter事件处理程序中将其更改为SizeWE,但在调整列大小后,它会更改回默认值。尝试在MouseUp或DragCompleted事件处理程序中将其更改为SizeWE不起作用。当鼠标按钮在“调整大小”结束时释放时,光标将更改为默认值。在MouseEnter处理程序中完成SizeWE更改后,当鼠标退出并再次进入时,仍然可以,但问题就在调整大小之后 xaml: 一个根本的解决方案是在光标进入拇指时设置鼠标。覆盖鼠标或,并在光标离开时将其设置回
一个根本的解决方案是在光标进入拇指时设置鼠标。覆盖鼠标或,并在光标离开时将其设置回原位:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<Thumb MouseEnter="UIElement_OnMouseEnter" MouseLeave="UIElement_OnMouseLeave" Grid.Column="1" x:Name="PART_HeaderGripper" HorizontalAlignment="Right"
Style="{DynamicResource GridView.ColumnHeader.Gripper.Style}"
Margin="-18,0, 0, 0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
那么,这就是您要找的吗?抱歉,不是。标题大小调整光标应该只出现在正确的位置。此解决方案使光标在标题中的任何位置都显示为调整大小的光标。所以它看起来像是调整大小,但像拖动一样(对列进行重新排序)。为什么不修改你的答案,将处理程序交给Thumb,而不是Grid,我接受并授予你奖金。这样看起来效果很好。正是你抓到我做的:))
private void PART_HeaderGripper_MouseUp(object sender, MouseButtonEventArgs e)
{
Thumb gripper = (Thumb)sender;
if (gripper != null)
{
gripper.Cursor = Cursors.SizeWE;
}
}
private void PART_HeaderGripper_MouseEnter(object sender, MouseEventArgs e)
{
Thumb gripper = (Thumb)sender;
if (gripper != null)
{
gripper.Cursor = Cursors.SizeWE;
}
}
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<Thumb MouseEnter="UIElement_OnMouseEnter" MouseLeave="UIElement_OnMouseLeave" Grid.Column="1" x:Name="PART_HeaderGripper" HorizontalAlignment="Right"
Style="{DynamicResource GridView.ColumnHeader.Gripper.Style}"
Margin="-18,0, 0, 0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
private void UIElement_OnMouseEnter(object sender, MouseEventArgs e)
{
Mouse.OverrideCursor = Cursors.SizeWE;
}
private void UIElement_OnMouseLeave(object sender, MouseEventArgs e)
{
Mouse.OverrideCursor = null;
}