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事件处理程序,它就会有一个 AdditionalItems/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 回答