0

私はWPFを初めて使用し、TabControlでタブを変更するためのイベントハンドラーの作成に問題があります。つまり、以前に選択したTabItemのインデックスと、イベントに関連付けられた新しく選択したTabItemのインデックスを見つける方法がわかりません。

これまでに試したコードは次のとおりです。

private void primaryFilterChanged(object sender, SelectionChangedEventArgs e) {
    if (e.Source is TabControl && IsLoaded) {
            int previous_index = (e.RemovedItems[0] as TabItem).TabIndex;
            int current_index = (e.AddedItems[0] as TabItem).TabIndex;
    ...
    }
}

しかし、「TabIndex」は私が思っていることを参照しておらず、代わりにTabキーを使用したときに取得するフォーカスアイテムの順序を参照していることに気付きました。

新しいインデックスを取得するために使用できることはわかっていtabcontrol.SelectedIndexますが、他の関数にも前のインデックスが必要です。どうもありがとう!

編集:私が使用した回避策は、イベントハンドラーの最後で更新される独自の「selectedTab」整数を作成することですが、それよりもエレガントなものを探していました。

4

2 に答える 2

0

次のような古いインデックスを取得できます。

var tabControl = e.Source as TabControl;
var oldTabItem = e.RemovedItems[0] as TabItem;
var oldIndex = tabControl.Items.IndexOf(oldTabItem);
于 2012-06-18T15:06:00.653 に答える
0

TabCOntrolはWPFが Selectorから継承するため、 SelectionChangedイベントハンドラーをフックするだけで、AttachedItems/RemovedItemsのリストが表示されます。これらはあなたが望むものを持っているでしょう

たとえば、これがあるとします

<TabControl SelectionChanged="TabSelectionChanged" SelectionMode="Single">
....
....
....
....
</TabControl>

このようなコードが背後にある場合

void TabSelectionChanged(object sender, SelectionChangedEventArgs args)
{
    var removedItems = args.RemovedItems;
    var addedItems = args.AddedItems;
}
于 2012-06-18T15:11:44.063 に答える