質問: C#/WPFでの質問なのですが。 tabControlでタブを表示しているのですが、TAB位置を交換することはできるのでしょうか?
回答: 慣れてくると簡単なんですが、初学者にはちょっと難しいですかね。 実装方法はいくつかあるので、サンプルの一つとして参考まで。 TabItemはClickイベントを持っていないので、MouseLeftButtonUpイベントで代用します。TabItemのタブの部分だけで反応できるようラベルを配置し、そのラベルにハンドラを登録します。 また、イベントハンドラ内から親のタブを参照する必要があるので、名前を付与しておきます。 ハンドラ内では操作されたタブの順番を確認します。タブの順番を持っているのはTabControl側であり、MouseUpのイベントはTabItemの子要素のLabelに付与しているので親子関係を辿り順番を求めます。 var tabItem = (TabItem)((Label)sender).Parent; int index = tabControl.Items.OfType().ToList().IndexOf(tabItem); タブ順の入れ替えについては、説明文から仕様が読み取れないので、とりあえず押下されたタブをひとつ前に持ってきます。先頭のものが押下された場合はそれ以上前へ行けないので処理は行いません。直接順番を入れ替える方法はないので、引っこ抜いてぶち込みます。 if(index > 0) { tabControl.Items.RemoveAt(index); tabControl.Items.Insert(index - 1, tabItem); tabItem.IsSelected = true; }