我有一个类(它扩展了框架元素),其中包含许多其他元素。
// 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
}
}
你的"exteded Framework Element class"不应该处理鼠标事件(或者如果他们处理它们,请将 e.Handle 设置为 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
}
}