Есть несколько пунктов, включенных в этот вопрос, которые необходимо решить.
Во-первых, RoutedEvent
будет распространяться вверх и вверх по визуальному дереву.Поэтому, если у вас есть встроенные элементы управления в такие элементы управления, как этот ...
<Grid Name="MyGrid">
<StackPanel>
<Button>Button 1</Button>
<Button>Button 2</Button>
<Button>
<TextBlock>Button 3</TextBlock>
</Button>
</StackPanel>
</Grid>
... прикрепление события для обработки поведения KeyDown
на MyGrid
;получит любой KeyDown
RoutedEvent
изнутри своих детей.
Существует одна оговорка, если событие помечено как обработанное элементом управления в визуальном дереве, что будет иметь место для элемента управления Button
и MouseLeftButtonDown
RoutedEvent;Затем вам нужно будет настроить способ регистрации.Это достаточно просто и может быть сделано следующим образом;где true
указывает, что вы хотите получать уведомления, даже если другой обработчик пометил событие как обработанное.
public Window1()
{
InitializeComponent();
MyGrid.AddHandler(UIElement.MouseLeftButtonDownEvent, new RoutedEventHandler(MouseLeftButtonDown), true);
}
private void MouseLeftButtonDown(object sender, RoutedEventArgs e)
{
Console.WriteLine("MouseLeftButtonDown Fired");
}
Если вы перейдете к отладчику, вы увидите, что источник RoutedEvent при нажатии* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;так как вы можете использовать различные RoutedEvents
.
Фокус все еще должен существовать где-то внутри приложения;это можно легко установить с помощью родительского элемента управления и вызова Focus
.