【问题标题】:Setting a Thumb's cursor when IsDragging = True当 IsDragging = True 时设置 Thumb 的光标
【发布时间】:2019-11-29 21:40:45
【问题描述】:

我有一个在资源字典中定义的 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 静态属性覆盖光标。是否可以使用触发器设置此静态属性?拖动拇指时我可以做些什么来改变光标?

【问题讨论】:

    标签: wpf xaml controltemplate


    【解决方案1】:
    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>
    

    【讨论】:

    • 您好,我已经尝试过了,不幸的是它不起作用。当我开始拖动时,光标仍变为“无”。 Thumb 也是在资源字典中实现的,所以我不能使用代码隐藏
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多