今度は RoutedEvents について学習しようとしています。バブリングとトンネリングとすべてを理解しています。しかし、私は少し問題があり、どのように処理すればよいかわかりません。
自分で定義した UserControl に ItemsControl があります ( TabItem を継承します)。この itemsControl は、ListBox またはまだ決定されていないセレクターである可能性があります (このソリューションで何が最適かによって異なります)。
ここで、1 つの項目が選択されたときに (最適な選択方法が何であるかはまだわかりませんが、おそらく doubleclick )、UserControl を保持する TabControl でイベントをキャプチャする必要があります。ありがたいことに、userControl が XAML ビジュアルツリーに配置されると、バブリング イベントが流れ、イベントが TabControl に到達できるようになります。ただし、これを実装するにはまだいくつかの問題があります。
1) MouseDoubleClick として設定したとしましょう (他のタブや ItemsControlItems の外側など)。イベントがどこから来ているかをいつでも確認して、それが正しいことを確認できると思いますが、それが正しい方法だとは思えず、問題が発生している可能性があります。
2) イベントを SelectionChanged に設定し、ItemsControl を ListBox に設定した場合、ListBox 自体がそれを処理しないようにして、tabControl に到達できるようにする必要があります。どうすればいいですか?
3) 2) と同じですが、TabControl はそれ自体がセレクタであるため、独自の selectionchange イベントが発生します。それはどのように機能しますか。ハンドラーはリストボックスと TabControl の両方から取得しますか?
4) どの ItemsControl を使用すればよいかわかりません。アイテムをダブルクリックしてからイベントを処理するためだけに使用している場合、ListBox は多すぎません。選択などの望ましくない多くの効果があります。独自の ItemsControl を定義するか、ListBox を使用して選択などのプロパティの一部を上書きする方がよいでしょうか (どうすればよいでしょうか?)。
5) イベントのソースは ItemsContainer ですが、アイテム自体は必要ありません。そこにアクセスする簡単な方法はありませんか?
6) ボタンを配置し、DataTemplate にボタンを介してオブジェクトの ID を添付し、ボタンのクリックが処理される場所でそれをキャプチャして、それがどのアイテムであったかを識別したいとしましょう。それを行うプロパティはありますか、それとも自分で定義する必要がありますか?
7) 自分のイベントを作成するのが最善の方法でしょうか?
この問題に対するあなたの見解と、ここで行うのに最適なプロセスについてのコメントは高く評価されています。
編集:尋ねられたように、もう少し情報を追加することにしました。
私が目指しているもの; プログラムを起動すると、1 つのタブを含む TabControl があります。このタブは、オブジェクトのリスト (CompanyModel) を保持するため、残りのタブとは異なります。このリストは、私が言及した ItemsControl です。このリストから 1 つの会社を押すと、その会社に関する情報を含む新しいタブが追加されます。
私の解決策は、TabControl のソースとして TabItem コレクションを作成することでした。次に、別の XAML ソース ファイルで 2 種類の TabItems を定義します (何と呼べばよいかわかりません。基本的に新しいユーザー コントロールを追加します)。1 つは最初にリストが表示される場所で、もう 1 つは CompanyModel をコンストラクター パラメーターとして受け取り、それに関する情報を表示します。
これは機能しますが、会社リストのタブアイテムを個別に定義するという考えは好きではありません。タブコントロールの下で定義することはできません。両方ではなく、定義されたアイテムまたはソースのみを持つことができるからです。
選択した会社の Id を TabControl までバブリングする List DataTemplate にボタンを配置し、そこで処理し、CompanyModel を使用して新しい TabItem を追加することで、このアイデアを試しました。それはそれを試すための単なる解決策であり、CompanyTabs に anpther ボタンを追加すると、TabControl でもそれらを取得するなどの問題があります。
したがって、元のlistTabからイベントをバブルする良い方法を見つけるか、TabControlと同じ場所にタブを定義できる場合、私の問題は解決できます。
別の解決策として、TabControl とは別のリストを作成する方法があることはわかっていますが、他の人はこれがどのように表示されるかを知りたいと考えています。