目的は、子ウィンドウからルーティング イベントを取得して処理することです。(コマンド)間にさらに多くの要素があるため、直接ルーティングを使用できません(読み取り:したくない)。
次の例は、イベント ルーティングが 1 つのウィンドウから 2 番目のウィンドウに機能していないことを示しています。子ウィンドウの XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Button Content="Raise Routing Event" HorizontalAlignment="Left" Margin="50" VerticalAlignment="Top"
Width="150" Click="RaiseRoutedEvent" />
</Grid>
イベントコードを上げる:
using System.Windows;
namespace WpfApplication1
{
public partial class Window1
{
private static readonly RoutedEvent ChildWindowEvent = EventManager.RegisterRoutedEvent("ButtonClicked",
RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Window1));
public Window1()
{
InitializeComponent();
}
public event RoutedEventHandler ButtonClicked
{
add { AddHandler(ChildWindowEvent, value); }
remove { RemoveHandler(ChildWindowEvent, value); }
}
private void RaiseRoutedEvent(object sender, RoutedEventArgs e)
{
RoutedEventArgs eventArgs = new RoutedEventArgs(ChildWindowEvent);
RaiseEvent(eventArgs);
}
}
}
メインウィンドウ:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication1="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525" wpfApplication1:Window1.ButtonClicked="HandleRoutedEvent">
<Grid>
<Button Content="Open new window" HorizontalAlignment="Left" Margin="50" VerticalAlignment="Top"
Width="150" Click="OpenNewWindow" />
</Grid>
</Window>
ルーティング イベントを処理するウィンドウ:
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void OpenNewWindow(object sender, RoutedEventArgs e)
{
Window1 window1 = new Window1();
window1.ShowDialog();
}
private void HandleRoutedEvent(object sender, RoutedEventArgs e)
{
MessageBox.Show("This message is shown from the Main Window");
}
}
}
イベントは Window1 から発生しますが、MainWindow.HandleRoutedEvent はブレーク ポイントに到達しません。なんで?