Событие TabChanged TabControl в WPF

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

3 ответов


на 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 ...
    }
}

Я просто хочу добавить свою мысль. И я буду использовать прохладный ответ @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.

вот оно!


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

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

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

XAML

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

C#

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);
    }
}