1

私は通常のWPFウィンドウを持っていますが、それを呼び出しましょう。このウィンドウには、アプリケーションのさまざまな要素の特定のイベントをログに記録TopLevelする単純なものがあります。ListView

したがって、と呼ばれる一連のユーザーコントロールを含むが含まれているとしGridます。それぞれに、パブリックプロパティとして関連付けられたオブジェクトがあります。これを、標準のチェックボックスと呼びましょう。TopLevelTaskTaskOrder

TopLevelここで、ユーザーがのチェックボックスをオンにするたびにイベントを受信したいのですが、イベントにはオブジェクトもTask含まれている必要があるため、からイベントログに入れることができます。OrderTopLevel

それ、どうやったら出来るの?ルーティングされたイベントを使用したいと思いますが、チェックボックスをクリックして「検索」Orderして上向きに送信する方法がわかりませんTopLevel

4

1 に答える 1

1

このようなものはどうですか...

private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        Task task = FindParentTask(checkBox);
        Order order = task.Order;
    }

ビジュアル ツリーをたどってタスクに到達する必要があるため、少し再帰を試すことができます...

public FrameworkElement FindParentTask(FrameworkElement element)
    {
        if (element.Parent.GetType() == typeof(Task))
            return element.Parent as FrameworkElement;
        else
            return FindParentTask(element.Parent as FrameworkElement);
    }

このメソッドをテストして、UserControls の 1 つで CheckBox の親 Expander を取得しました。ビジュアル ツリーの数レベル上にあり、StackPanels、Grids、および DockPanels のヒープにネストされています。

于 2010-01-22T10:23:43.450 に答える