2010-07-11 19 views
6

'daki olaylara tıklayın. WPF uygulamamda bir UserControl var. Bir tıklama olayı çağırmak ve kullanıcı UserControl tıklattığında bazı şeyler yapmak istiyorum. Sorun, - UserControl'ın bir tıklama olayı yok. Web'de arama yaptım ve MouseLeftButtonUp olayını kullanabileceğinizi öğrendim. Denedim, ancak tıklamalarıma cevap vermiyor. Herhangi bir fikrin var mı? Teşekkürler!UserControl-WPF

cevap

10
bir TextBlock adlı _textBlock eklemek test etmek

Yapmaya çalıştığınız şeyi yazmadınız, ancak bir tıklama etkinliğine ihtiyaç duyuyorsanız, belki de bir çeşit düğme yazıyorsunuz (Düğme sınıfı aslında "tıklayabileceğiniz bir şey" olabilir. yer)

  • içeride karmaşık içeriğe sahip bir düğme gerekiyorsa - düğmesini
  • için özel bir denetim şablonu yazmak bir düğme gibi görünmüyor bir düğme gerekirse bir düğmeye
  • içine kullanıcı kontrolü uygulandı
  • Ekstra işlevsellik alt sınıfı düğmesi olan bir düğmeye ihtiyacınız varsa, kodda fazladan veri/davranış ekleyin ve XAML ekranını bir stile yerleştirin.
3

Gereksinimleriniz için bence PreviewMouseLeftButtonUp (Down) etkinliği daha uygun. Daha sonra, tıklamaların sayısını hesaplamak için ClickCount'u kullanmanız ve ardından kendi kontrolünüzü, diğer kontrollerin bileceği, kontrolünüzün tıklandığını yükseltmeniz gerekir. Tıklama olayını ele almak için çok daha fazla yöntem var. Sen idare hem tıklayın this msdn article ve this

GÜNCELLEME bakmak ve DoubleClick gerekir

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     _myCustomUserControl.MouseLeftButtonUp += new MouseButtonEventHandler(_myCustomUserControl_MouseLeftButtonUp); 
     _myCustomUserControl.MouseDoubleClick += new MouseButtonEventHandler(_myCustomUserControl_MouseDoubleClick); 
    } 

    bool _doubleClicked;   

    void _myCustomUserControl_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     _textBlock.Text = "Mouse left button clicked twice"; 
     _doubleClicked = true; 
     e.Handled = true;  
    } 

    void _myCustomUserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (_doubleClicked) 
     { 
      _doubleClicked = false; 
      return; 
     } 

     _textBlock.Text = "Mouse left button clicked once"; 
     e.Handled = true;   
    }   
} 

bu örnek _myCustomUserControl olarak kontrolünü isim ve MainWindow.xaml

+0

Gerçekten clickCount kullanarak ne anlama geldiğini anlamadı. Bunu kodla gösterebilir misiniz? Teşekkürler – amitairos

+0

ClickCount, MouseButtonEventArgs'ın te özelliklerinden biridir. Etkinlik işleyicisini bildirdiğinizde e.ClickCount aracılığıyla erişilebilir. Sadece bir tıklama veya daha fazlası olup olmadığını öğrenmek için bu değeri izlemeniz gerekir. eğer işleyicisi Önizleme ise (e.ClickCount == 2) // DoubleClick olay burada yükseltirseniz (e.ClickCount == 1) // burada Tıkla olay yükseltmek (tam olarak başlar yükselterek demektir Ebeveynlere kadar KENDİNİZİ kontrol etmelisiniz. –

+0

Ve özür dilerim, bu makinede yüklü IDE yok şimdi size doğru kodu nasıl işlemek için kod açmak için. :( –

0

Neden sadece MouseDown'ı kullanmıyorsunuz?

Kullanıcı Kontrol olayı koyun ve sadece bunu:

private void MyControl_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.ChangedButton == MouseButton.Left) 
    { 
     MessageBox.Show("Clicked!"); 
    } 
} 
+2

düğmesine tıklayın ve tekrar sadece düğmeye basın. – ygoe