1

子ユーザー コントロールから親にイベントをバブルしようとしています。

子ユーザー コントロールは、グリッド内のボタンです。

<UserControl>
    <Grid>
        <Button Click="Button_Click" />
    </Grid>
</UserControl>

親ユーザー コントロールは、子コントロールの多くのインスタンスで構成されます。

<UserControl>
    <StackPanel>
        <customs:myButton CustomClick="something" />
        <customs:myButton CustomClick="something" />
        <customs:myButton CustomClick="something" />
        etc.
    </StackPanel>
</UserControl>

私が定義した子ユーザーコントロールで:

    public delegate void CustomClickHandler(object sender, EventArgs e);
    public event CustomClickHandler CustomClick;

「内側」のボタンは、次の方法でクリック イベントを処理します。

    private void Button_Click(object sender, EventArgs e)
    {
        if (CustomClick != null)
            CustomClick (sender, e);
    }

何が起こっているのかを確認しようとしましたが、Button_Click が呼び出され、CustomClick が null ではなく、実行されることがわかります。ただし、何も起こらないようです。親のユーザーコントロールでもそれに付随するコードは呼び出されません。

なにか提案を?

前もってありがとう、乾杯、ジャンルカ。

4

2 に答える 2

0

探しているものは、ルーティング イベントと呼ばれます。独自のカスタム スクリプトを作成するか、このライブラリを参照してください。

于 2011-03-09T16:47:26.653 に答える
0

わかりました、これを整理しましたが、問題はほとんどありませんでした。

最初の問題は、IsHitTestVisible が原因でした。一部のオンライン記事では、マウス イベント関連の問題を解決するために、そのプロパティを false に設定するように言われていました。私はそうしましたが、そのプロパティがfalseに設定された要素がマウスイベントを「キャッチ」していて、内部のユーザーコントロールに到達しなくなったため、それは間違っていました。

次に、最も内部的なボタン (シナリオを理解するには、上記の投稿を参照してください) で、これを機能させるために、ClickMode="Hover" を設定し、MouseLeftButtonUp イベントを処理する必要がありました。標準のクリックを使用しようとしますが、特定のイベントのみが泡立つことをどこかで読みました...

e.Handled を変更する必要はありませんでした: 確認したところ、既に false でした。

RoutedEvent ライブラリを使用する必要もありませんでした...

問題を解決するために私がしたことは他に考えられません。

これで全部だと思います。

いつものように、何か提案があれば、ここに追加してください。

乾杯、ジャンルカ。

于 2011-03-09T18:21:08.303 に答える