是否可以旋转 FrameworkElement.Cursor
?
我的应用程序允许用户围绕其中心旋转对象。旋转后,默认的调整大小光标在倾斜的边框顶部显得很笨拙。
我的第一个想法是将 RotateTransform
应用于 Cursor 属性,但看起来我们不能在 XAML 中这样做。接下来我尝试从 Cursor
类继承,但看起来 MS 家伙已经密封
它。
另一种方法是将默认光标设置为 None
并使用我自己的图像(带变换)并将其位置设置为 MouseMove
。如果有更简单的选择,我不愿意走那条路。谁有好的建议?
如果可能的话,我正在寻找仅限 WPF 的解决方案。
最佳答案
最终在 WPF 范围内管理它,而不使用 WinForms 或 PInvokes。而不是即时创建自定义游标 (*.cur) 或转换 Visual
s 变成游标,我用了 MouseMove
父控件的事件以及 WPF 元素 ( Path
) 作为我的光标。以下是以防万一有人感兴趣的方法:
- 设置
Cursor
调整大小拇指(或任何你用作形状边界的东西)到None
, 这样 WPF 就不会显示默认箭头。 创建您自己的光标。可以是任何
FrameworkElement
, 但我用过Path
因为它易于操作以创建您想要的任何形状。请注意,我在下面设置的大部分属性都很重要。<Path x:Name="PART_EW" Data="M0,20 L25,0 25,15 75,15 75,0 100,20 75,40 75,25 25,25 25,40z" Fill="White" Stroke="Black" StrokeThickness="1" Visibility="Collapsed" Width="50" Height="20" Opacity=".7" Stretch="Fill" Panel.ZIndex="100001" HorizontalAlignment="Left" VerticalAlignment="Top" IsHitTestVisible="False" />
在调整大小的拇指中添加以下代码:
protected override void OnMouseEnter(MouseEventArgs e)
{
base.OnMouseEnter(e);
var Pos = e.GetPosition(this);
PART_EW.Margin = new Thickness(
Pos.X - PART_EW.Width / 2,
Pos.Y - PART_EW.Height / 2,
-PART_EW.Width,
-PART_EW.Height);
PART_EW.Visibility = Visibility.Visible;
}
protected override void OnMouseLeave(MouseEventArgs e)
{
base.OnMouseLeave(e);
PART_EW.Visibility = Visibility.Collapsed;
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
var Pos = e.GetPosition(designerItem);
PART_EW.Margin = new Thickness(
Pos.X - PART_EW.Width / 2,
Pos.Y - PART_EW.Height / 2,
-PART_EW.Width,
-PART_EW.Height);
}
请注意,我没有设置 RotateTransform
我的Path
代码中的任何位置,因为它已经是调整大小拇指的一部分,因此会自动获取父控件的角度。
希望这对以后的人有所帮助。
关于c# - 不使用 WinForms 旋转光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123912/