3

私はより大きなプロジェクトでこの問題を抱えています......それで私は概念実証として「Testpoject」を設定しました:

  • 新しいSilverlight-アプリケーション
  • リストボックスを追加
  • リストボックスにいくつかのチェックボックスを入力します
  • listBox1_MouseLeftButtonDownを登録します
  • listBox1_MouseRightButtonDownを登録します

listBox1_MouseLeftButtonDownはどのような状況でも起動しないことがわかります。ただし、listBox1_MouseRightButtonDownは正常に起動します。

ListBoxクラスの何かがe.Handled=falseに設定されていると仮定して、ListBoxから派生し、オーバーライドするカスタムクラスを使用してみましたが、これでも動作は変わりませんでした。

これが発生する理由と修正方法に関するアイデアはありますか?

(この問題は、「親」コントロールがClick-Eventを受信するのも停止するため、イベントの受け渡しが中断されます)

:edit:回避策で問題を修正しました...そのため、回答はもう必要ありません。誰かがそれのためになぜこれが起こっているのかを理解したいと思ったとしても;)

4

2 に答える 2

5

これはあなたの質問に答えているようです。引用するには:

これは、ListBoxItem がこのイベントと MouseLeftButtonDown イベント (バブリングを停止する) を内部的に処理して、項目の選択を実装するためです。

解決策は、コード ビハインド ファイルにイベント ハンドラーを追加することです。記事から:

ルーティング イベント ハンドラーで RoutedEventArgs パラメーターの Handled プロパティを true に設定すると、トンネリングまたはバブリングが停止するように見えますが、ツリーのさらに上または下にある個々のハンドラーは、とにかくイベントを受け取ることを選択できます。これは、ブーリアンのhandledEventsTooパラメーターを追加するAddHandlerのオーバーロードを使用して、手続き型コードからのみ実行できます。

ただし、最後の警告を参照してください。

于 2010-08-09T03:21:22.753 に答える
1

これは仕様によるものです。フレームワークコードを確認すると、ListBoxItemがHandledプロパティをtrueに設定していることがわかります。

これとまったく同じ問題が発生したため、ListBoxItem.ItemTemplateで、コンテンツにイベントハンドラーを追加しました。

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
        ... other controls ...
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
于 2010-12-07T23:39:35.383 に答える