3

目的は、子ウィンドウからルーティング イベントを取得して処理することです。(コマンド)間にさらに多くの要素があるため、直接ルーティングを使用できません(読み取り:したくない)。

次の例は、イベント ルーティングが 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 はブレーク ポイントに到達しません。なんで?

4

1 に答える 1