2016-08-24 26 views
5

FrameworkElement.Cursor döndürmek mümkün mü?WinForms kullanmadan imleç döndürme

Uygulamam, kullanıcının nesneleri kendi merkezlerinin çevresinde döndürmesine izin veriyor. Döndükten sonra, varsayılan yeniden boyutlandırma imleçleri eğik kenarların üstünde tuhaf görünür.

Mouse cursor not affected by transform

ilk düşüncem İmleç özelliğine RotateTransform uygulamak, ama biz XAML bunu yapamam gibi görünüyor. Daha sonra Cursor sınıfından miras almayı denedim, ancak MS çalışanlarının sealed var gibi görünüyor.

Varsayılan olarak imleci None olarak ayarlamak ve kendi görüntüsümü kullan (dönüştürmek ile) ve konumunu MouseMove üzerinde ayarlamaktır. Daha kolay alternatifler varsa o yoldan gitmeye istekli değilim. İyi bir öneri olan var mı?

Mümkünse sadece WPF çözümü arıyorum.

+2

[Döndürülmüş Metin Kutusuna Göre İmleci Döndürme] 'nin olası kopyası (http://stackoverflow.com/questions/2835502/rotating-cursor-according-to-rotated-textbox) –

+1

@FirstStep: Bu yanıtın yorumlarında daha önce belirtildiği gibi Bu kodda birkaç hata var. Ayrıca WinForms kütüphanelerini kullanır; Başka bir yol olmadıkça kaçınmak istiyorum. – dotNET

+0

Bana göre, bu iki soru arasında makul bir fark var. Bunun bir kopya olarak kapatılması gerektiğini düşünmüyorum. – arbitrarystringofletters

cevap

0

Sonunda, WFF'nin sınırları dahilinde WinForms veya PInvokes kullanmadan yönetti. Özel imleçler (* .cur) oluşturmak veya imleç içine Visual s dönüştürmek yerine, imleç olarak bir WPF öğesi (Path) ile birlikte ana denetimin MouseMove olayını kullandım. İşte her ihtimale karşı herkes interesed edilir yolu şudur: WPF varsayılan oku görüntülemek kalmaması

  1. , sizin boyutlandırma başparmak (veya şeklin sınırı olarak kullandığınız ne olursa olsun) None ila Cursor ayarlayın.
  2. Kendi imlecinizi oluşturun. Herhangi bir FrameworkElement olabilir, ama istediğiniz herhangi bir şekil oluşturmak için kolay manipülasyon için Path kullandım. Aşağıda belirlediğim özelliklerin çoğunun önemli olduğunu unutmayın.

<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" />

sizin boyutlandırma başparmak aşağıdaki kodu ekleyin: her yerde kodunda benim Path arasında RotateTransform ayarlanmamış ettik

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); 
} 

Not, zaten bir parçası olduğu için yeniden boyutlandırma başparmağı ve bu nedenle ana kontrolün açısını otomatik olarak alır. Umarım bu, insanların yolun aşağısında olmasına yardımcı olur.