C#/WPFでの質問なのですが。 tabControlでタブを表示しているのですが、TAB位置を交換することはできるのでしょうか?
C#/WPFでの質問なのですが。 tabControlでタブを表示しているのですが、TAB位置を交換することはできるのでしょうか? 例えば (3個固定で考えてもらってよいのですが) ITEM1 - ITEM2 - ITEM3 とタブアイテムが表示されている時 ITEM3をクリック選択したときに ITEM1 - ITEM3 - ITEM2 といったように選択したITEMが2番目(中央)になるように配置したいのです。 簡単にはできないでしょうか? よろしくお願いします。(C#、WPFとも初心ものですいません)
ベストアンサー
慣れてくると簡単なんですが、初学者にはちょっと難しいですかね。 実装方法はいくつかあるので、サンプルの一つとして参考まで。 TabItemはClickイベントを持っていないので、MouseLeftButtonUpイベントで代用します。TabItemのタブの部分だけで反応できるようラベルを配置し、そのラベルにハンドラを登録します。 <TabItem > <TabItem.Header> <Label Content="ITEM1" MouseLeftButtonUp="Label_MouseLeftButtonUp"/> </TabItem.Header> </TabItem> また、イベントハンドラ内から親のタブを参照する必要があるので、名前を付与しておきます。 <TabControl x:Name="tabControl"> ハンドラ内では操作されたタブの順番を確認します。タブの順番を持っているのはTabControl側であり、MouseUpのイベントはTabItemの子要素のLabelに付与しているので親子関係を辿り順番を求めます。 var tabItem = (TabItem)((Label)sender).Parent; int index = tabControl.Items.OfType<TabItem>().ToList().IndexOf(tabItem); タブ順の入れ替えについては、説明文から仕様が読み取れないので、とりあえず押下されたタブをひとつ前に持ってきます。先頭のものが押下された場合はそれ以上前へ行けないので処理は行いません。直接順番を入れ替える方法はないので、引っこ抜いてぶち込みます。 if(index > 0) { tabControl.Items.RemoveAt(index); tabControl.Items.Insert(index - 1, tabItem); tabItem.IsSelected = true; }
質問者からのお礼コメント
詳細な回答ありがとうございます。 非常に参考になり、実装できました。
お礼日時:1/20 17:36