В C # события всегда были очень защищены: их может вызывать только владелец события.Тем не менее, в WPF это выглядит совсем по-другому - любой может бросить любое событие в любое время.Чтобы проверить это, я написал код внизу.
Когда я использовал RaiseEvent для поднятия Button.Click, событие выше поймало его.Это запланированное поведение событий WPF?Просто позволять кому-либо бросать любые события, которые они желают?Кроме того, если так, то что означает значение OwnerType при регистрации события?Я думал, что это какая-то защита, но если она есть, то она плохая, поскольку любой может получить доступ к общедоступному событию и использовать функцию AddOwner для добавления новых владельцев.
Спасибо!
XAML
<StackPanel Button.Click="ButtonBase_OnClick">
<Button Name="RealButton">Real button</Button>
<WpfWindow:VitalyControl MouseDown="UIElement_OnMouseDown">
I am almost a button
</WpfWindow:VitalyControl>
</StackPanel>
Код позади
Пользовательский элемент управления:
class VitalyControl : Label
{
public VitalyControl()
{
this.MouseDown += new MouseButtonEventHandler(VitalyControl_MouseDown);
}
void VitalyControl_MouseDown(object sender, MouseButtonEventArgs e)
{
RaiseEvent(new RoutedEventArgs(Button.ClickEvent, this));
}
}
И обработчик:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button was pressed");
}