如何永久更改WPF GridViewColumnHeader夹持器光标?

如何永久更改WPF GridViewColumnHeader夹持器光标?,wpf,xaml,controltemplate,Wpf,Xaml,Controltemplate,我可以在Loaded、Initialized、MouseEnter事件处理程序中将其更改为SizeWE,但在调整列大小后,它会更改回默认值。尝试在MouseUp或DragCompleted事件处理程序中将其更改为SizeWE不起作用。当鼠标按钮在“调整大小”结束时释放时,光标将更改为默认值。在MouseEnter处理程序中完成SizeWE更改后,当鼠标退出并再次进入时,仍然可以,但问题就在调整大小之后 xaml: 一个根本的解决方案是在光标进入拇指时设置鼠标。覆盖鼠标或,并在光标离开时将其设置回

我可以在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;
    }