/// <summary> /// We use this function to get the TabItemAutomationPeer associated with the TabItem /// </summary> /// <param name="item">TabItem that we are seeking to find the AutomationPeer for</param> /// <returns>The TabItemAutomationPeer for the specified TabItem</returns> internal static TabItemAutomationPeer GetTabItemAutomationPeer(TabItem item) { TabControlAutomationPeer tabControlPeer = TabControlAutomationPeer.FromElement(item.TabControlParent) as TabControlAutomationPeer; if (tabControlPeer == null) { tabControlPeer = TabControlAutomationPeer.CreatePeerForElement(item.TabControlParent) as TabControlAutomationPeer; } if (tabControlPeer != null) { List <AutomationPeer> children = tabControlPeer.GetChildren(); if (children != null) { foreach (AutomationPeer peer in children) { TabItemAutomationPeer tabItemPeer = peer as TabItemAutomationPeer; if (tabItemPeer != null && tabItemPeer.Owner == item) { return(tabItemPeer); } } } } return(null); }
/// <summary> /// IsSelected changed handler /// </summary> /// <param name="d">TabItem that changed IsSelected.</param> /// <param name="e">DependencyPropertyChangedEventArgs.</param> private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { TabItem tabItem = d as TabItem; Debug.Assert(tabItem != null); bool isSelected = (bool)e.NewValue; RoutedEventArgs args = new RoutedEventArgs(); if (isSelected) { tabItem.OnSelected(args); } else { tabItem.OnUnselected(args); } // fire the IsSelectedChanged event for automation if (AutomationPeer.ListenerExists(AutomationEvents.SelectionItemPatternOnElementSelected)) { TabControl parentSelector = tabItem.TabControlParent; if (parentSelector != null) { TabItemAutomationPeer tabItemPeer = GetTabItemAutomationPeer(tabItem); if (tabItemPeer != null) { tabItemPeer.RaiseAutomationIsSelectedChanged(isSelected); } } } tabItem.IsTabStop = isSelected; tabItem.UpdateVisualState(); }