将事件从子控件升级到父控件

时间:2013-09-12 08:38:33

标签: c# silverlight events event-handling

我有一个类(扩展了框架元素),其中包含许多其他元素。

    // Click event coverage area
    private Rectangle connectorRectangle;

这些形状都有自己的事件处理程序,当用户点击它们时,它的运行状况良好。现在我想要的是能够处理'从课堂范围之外右键单击我的课程。

所以我认为最好的方法是在内部处理事件,并以某种方式将其冒充到顶部

private void connectorRectangle_MouseRightButtonUp(object sender, MouseButtonEventArgs e)

        MouseButtonEventArgs args = new MouseButtonEventArgs();

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

问题在于我不知道如何举起活动。 this.OnMouseRightButtonUp并不存在,我发现的所有教程都是用于提升自定义事件。

我对银光很新,所以如果我错过了一些明显的东西,请耐心等待。

2 个答案:

答案 0 :(得分:0)

试一试:

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

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

答案 1 :(得分:0)

你的“扩展框架元素类”不应该处理鼠标事件(或者如果它们处理它们,则将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
    }
}