Событие TabChanged TabControl в WPF

У меня есть TabControl в WPF. Я хочу найти событие, которое происходит при изменении вкладок. Как называется это событие?

Ответ 1

TabControl наследует от Selector, который содержит событие SelectionChanged.

<TabControl SelectionChanged="OnSelectionChanged" ... />

private void OnSelectionChanged(Object sender, SelectionChangedEventArgs args)
{
    var tc = sender as TabControl; //The sender is a type of TabControl...

    if (tc != null)
    {
        var item = tc.SelectedItem;

        //Do Stuff ...
    }
}

Ответ 2

Я просто хочу добавить свою мысль. И я буду использовать классный ответ @pratap k, чтобы сделать это.

<TabControl x:Name="MyTab" SelectionChanged="TabControl_SelectionChanged">
    <TabItem x:Name="MyTabItem1" Header="One"/>
    <TabItem x:Name="MyTabItem2" Header="2"/>
    <TabItem x:Name="MyTabItem3" Header="Three"/>
</TabControl>

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (MyTabItem1 !=null && MyTabItem1.IsSelected)
    // do your staff
    if (MyTabItem2 !=null && MyTabItem2.IsSelected)
    // do your staff
    if (MyTabItem3 !=null && MyTabItem3.IsSelected)
    // do your staff
}

Как вы видите, разница заключается в добавлении проверки для NULL.

Вот и все!

Ответ 3

Я не получил выбранный ответ для работы, возможно, что-то изменилось, возможно, моя настройка отличается.

Мои решения просты, вы отправляете отправителя в tabControle. Затем вы вытаскиваете выбранный TabItem (selectedValue) и передаете его в TabItem.

В моей ситуации мне нужно знать, кто изменился, поэтому я ищу имя TabItem, чтобы лучше реагировать на конкретное событие.

XAML

<TabControl SelectionChanged="OnTabItemChanged">
    <TabItem Name="MainTap" Header="Dashboard"></TabItem
</TabControl>

С#

private async void OnTabItemChanged(object sender, SelectionChangedEventArgs e)
{

    TabControl tabControl = sender as TabControl; // e.Source could have been used instead of sender as well
    TabItem item = tabControl.SelectedValue as TabItem;
    if (item.Name == "MainTap")
    {
        Debug.WriteLine(item.Name);
    }
}

Ответ 4

у меня есть один вопрос. Когда я использую selectionChanged, я не использую selectedItem. Есть ли способ это исправить? Спасибо