Событие TabChanged TabControl в WPF - PullRequest
10 голосов
/ 17 ноября 2011

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

Ответы [ 3 ]

24 голосов
/ 17 ноября 2011

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 ...
    }
}
3 голосов
/ 18 августа 2016

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

Мои решения просты, вы отправили отправителя, чтобы стать 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);
    }
}
3 голосов
/ 25 апреля 2014

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

Вот и все!

...