是否可以轮播FrameworkElement.Cursor
?
我的应用程序允许用户围绕其中心旋转对象。旋转后,默认调整大小的光标在倾斜边框上显得很笨拙。
我的第一个想法是将RotateTransform
应用于Cursor属性,但看起来我们无法在XAML中执行此操作。接下来我尝试从Cursor
类继承,但看起来MS家伙有sealed
。
另一种方法是将默认光标设置为None
并使用我自己的图像(使用变换)并在MouseMove
上设置其位置。如果有更容易的选择,我不愿意走这条路。任何有良好建议的人?
如果可能的话,我正在寻找仅支持WPF的解决方案。
答案 0 :(得分:1)
最后在WPF的范围内管理它,而不使用WinForms或PInvokes。我没有动态创建自定义游标(* .cur)或将Visual
转换为游标,而是使用父控件的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"
/>
在resize thumb中添加以下代码:
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
的{{1}},因为它已经是调整大小拇指的一部分,因此会自动获取父控件的角度。
希望这可以帮助人们继续前进。