質問

2つのコントロールAとBがあります。BがAにコントロールBが配置されます。Bがクリックされるだけで、クリックされたイベントが発生しますが、Aのクリックイベントも発生する必要があります。これは、ルーティングされたイベントを使用してどういうわけか実現できますか?

これがコントロールのスクリーンショットです:

Alt Text http://www.imagebanana.com/img/hu5znv4/buttons.png

もちろん、このケースは縮小された例にすぎません。マウスカーソル / 1つの場所ですべてのコントロールでイベントを提起する一般的な方法を探しています。 Hoewever、この問題に対する具体的な解決策は私も助けてくれます!ヒントをありがとうございました!

役に立ちましたか?

解決

これは、内側のコントロールのイベントハンドラーがe.handledプロパティをTrueに設定した場合に発生する可能性があります。これにより、ルーティングされたイベントがさらに泡立つことができなくなります。しかし、私はちょうどチェックしましたが、WPF 4でその動作はわかりません。

E.Handledがあなたのイベントを防いでいる場合、あなたができることは uielement.addhandler Boolean HundledEventStooパラメーターを使用してクリックイベントを接続する過負荷。これは、マークアップではなく、コードで実行する必要があります。次に、外側のコントロールでクリックイベントを受け取る必要があり、E.Handledプロパティは既にTrueに設定されます。

次のコードは、内側ボタンをクリックすると、両方のボタンの背景を設定します。

<Grid>
    <Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
        <Button Width="100" Height="25" Margin="20" Click="Click2" />
    </Button>
</Grid>

背後にコード

private void Click1( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Blue );
}

private void Click2( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Red );
    //e.Handled = true; // uncomment to stop bubbling
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top