簡體   English   中英

從子控件引發事件到父控件

[英]Raising an event from child control to parent control

我有一個類(擴展了Framework Element),該類中包含許多其他Elements。

    // Click event coverage area
    private Rectangle connectorRectangle;

這些形狀都有其事件處理程序,並且當用戶單擊它們時,它們的效果很好。 現在,我想要的是能夠從類范圍之外“處理”我的類。

因此,我認為最好的方法是在內部處理事件,並以某種方式將其冒頂

private void connectorRectangle_MouseRightButtonUp(object sender, MouseButtonEventArgs e)

        MouseButtonEventArgs args = new MouseButtonEventArgs();

        //???
        e.Handled = true;
    }

問題是我不知道該如何籌辦這項活動。 this.OnMouseRightButtonUp不存在,我正在找到的所有教程都是關於引發自定義事件的。

我是Silverlight的新手,所以如果我錯過了明顯的事情,請多多包涵。

試試吧 :

public Rectangle
{    
   this.Click += new System.EventHandler(Function);  
}

private void Function(object sender, System.EventArgs e)
{
   if (((MouseEventArgs)e).Button == MouseButtons.Right)
   {
       //Your code         
   }
}

您的“擴展的Framework Element類”不應處理鼠標事件(或者如果處理它們,請將e.Handled設置為false)。 然后事件應自動冒泡(不重新引發事件)。

編輯

public class ExtendedFrameworkElement : Grid
{
    public ExtendedFrameworkElement()
    {
        Border b1 = new Border();
        b1.Padding = new Thickness(20);
        b1.Background = Brushes.Red;
        b1.MouseRightButtonUp += b1_MouseRightButtonUp;

        Border b2 = new Border();
        b2.Padding = new Thickness(20);
        b2.Background = Brushes.Green;
        b2.MouseRightButtonUp += b2_MouseRightButtonUp;

        b1.Child = b2;

        this.Children.Add(b1);
    }

   private void b1_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        //DoSomeThing
        e.Handled = false;
    }

  private void b2_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        //DoSomeThing
        e.Handled = false;
    }
}

Xaml:

<Window x:Class="WpfApplicationTest.MainWindow">
    <wpfApplicationTest:ExtendedFrameworkElement MouseRightButtonUp="UIElement_OnMouseRightButtonUp"/>
</Window>

背后的代碼:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }


    private void UIElement_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
    {
        //DoSomeThing
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM