首页 > 解决方案 > 当 IsDragging = True 时设置 Thumb 的光标

问题描述

我有一个在资源字典中定义的 Thumb 控件模板。

<ControlTemplate TargetType="{x:Type Thumb}">
    <Border x:Name="PART_Border"
            Cursor="SizeWE"
            Padding="{TemplateBinding Padding}"
            Background="{TemplateBinding Background}"
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</ControlTemplate>

ControlTemplate 以我调用的GridColumnHeaderGripper样式实现,并且此样式在另一个资源字典中实现

<ControlTemplate TargetType="GridViewColumnHeader">
    <DockPanel>
    <Thumb x:Name="PART_HeaderGripper"
            DockPanel.Dock="Right"
            Margin="0,0,-8,0"
            Cursor="SizeWE"
            Style="{StaticResource GridColumnHeaderGripper}" />
    etc...

但是,当我开始拖动 Thumb 时,它的效果很好,然后光标从“SizeWE”变为“None”。我在 StackOverflow 上看到另一个类似的帖子,建议使用触发器来设置光标。

<ControlTemplate.Triggers>
    <Trigger Property="IsDragging" Value="True">
        <Setter Property="Cursor" Value="SizeWE"/>
    </Trigger>
</ControlTemplate.Triggers>

但是,此解决方案对我不起作用。

据我了解,我们可以使用Mouse.OverrideCursor静态属性覆盖光标。是否可以使用触发器设置此静态属性?拖动拇指时有什么办法可以改变光标吗?

标签: wpfxamlcontroltemplate

解决方案


Add 'Cursor' attribute where you actually declare thumb.  

<Window x:Class="ThumbCursor.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ThumbCursor"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <ControlTemplate x:Key="template" TargetType="{x:Type Thumb}">
            <Border x:Name="PART_Border"
            Cursor="SizeWE"
            Padding="{TemplateBinding Padding}"
            Background="{TemplateBinding Background}"
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <Thumb x:Name="thmb" Height="50" Width="100" Cursor="SizeWE" Template="{StaticResource template}" DragDelta="thmb_DragDelta"/>
    </Grid>
</Window>

推荐阅读