2013-09-12 3 views
0

У меня есть класс (который расширяет элемент Framework), который содержит внутри него ряд других элементов.Поднятие события от дочернего элемента управления до родительского элемента управления

// Click event coverage area 
    private Rectangle connectorRectangle; 

Эти формы имеют свои обработчики событий, и когда пользователь нажимает на них свою работу хорошо. Теперь я хочу, чтобы «обрабатывать» щелчок правой кнопкой мыши по моему классу из-за пределов области действия класса.

Так я понял, что лучший способ сделать это, чтобы обрабатывать событие внутри, и как-то пузырь его верхней

private void connectorRectangle_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 

     MouseButtonEventArgs args = new MouseButtonEventArgs(); 

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

Проблема в том, что я понятия не имею, как поднять событие. this.OnMouseRightButtonUp не существует, и все учебники, которые я нахожу, предназначены для создания настраиваемых событий.

Я довольно новичок в серебряном свете, так что несите меня, если я пропустил что-то очевидное.

ответ

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   
    } 
} 
+0

Прямоугольник встроенный класс. Также я не понимаю, что ваш код пытается сделать. Я знаю, как прикрепить обработчик, мне просто нужно, чтобы событие вышло из-под ребенка, так что работает подключенный обработчик на уровне родителя. – user2110845

0

Вашего «exteded класса Framework Элемент» не должен Генделем события мышей (или, если они Гендель их, установите e.Handled ложь). Затем событие должно автоматически появляться автоматически (без ререйза события).

EDIT

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 
    } 
} 
+0

Это не работает. Без обработчика он все равно не достигает вершины. – user2110845

+0

Я обновил свой пост. Это то, что вы хотите сделать? Этот код отлично подходит для меня. – Snowcrack

+0

Из какого класса ExtendedFrameworkElement наследуется ваш код? – Snowcrack

Смежные вопросы