dot*_*NET 6 c# wpf xaml mouse-cursor
可以旋转FrameworkElement.Cursor吗?
我的应用程序允许用户围绕其中心旋转对象.旋转后,默认调整大小的光标在倾斜边框上显得很笨拙.
我的第一个想法是应用于RotateTransformCursor属性,但看起来我们不能在XAML中这样做.接下来我尝试从Cursor类继承,但它看起来像MS家伙拥有sealed它.
另一种方法是将默认光标设置为None并使用我自己的图像(使用变换)并设置其位置MouseMove.如果有更容易的选择,我不愿意走这条路.谁有好的建议?
如果可能的话,我正在寻找一个仅支持WPF的解决方案.
最终在 WPF 的范围内管理它,而不使用 WinForms 或 PInvokes。我没有即时创建自定义光标 (*.cur) 或将Visuals 转换为光标,而是使用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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,我没有在代码中的任何位置设置RotateTransform我的Path值,因为它已经是调整大小拇指的一部分,因此会自动获取父控件的角度。
希望这对人们有所帮助。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           851 次  |  
        
|   最近记录:  |