/// <summary> /// Create tab header item container /// </summary> private View CreateItemFromTabView(TabItem tabItem) { if (tabItem.HeaderTemplate == null && tabItem.Header == null) { throw new Exception("TabBar.CreateItemContainer: TabItem HeaderTemplate is null and Header is null or not type of View"); } IToggable item = null; // Create container from TabItem.HeaderTemplate if (tabItem.Header != null && tabItem.Header is View) { item = tabItem.Header as IToggable; } else { View header = tabItem.HeaderTemplate.CreateContent() as View; Binding bind = new Binding("Header"); bind.Source = tabItem; header.SetBinding(View.BindingContextProperty, bind); item = header as IToggable; } if (item == null) { throw new Exception("TabBar.CreateItem: ItemTemplate is not subclass of ToggleButton"); } item.IsToggledChanged -= OnIsToggledChanged; item.IsToggledChanged += OnIsToggledChanged; return(item as View); }
/// <summary> /// Toggle without event raise /// </summary> private void Toggle(IToggable toggleButton) { if (toggleButton.IsToggled == false) { toggleButton.IsToggledChanged -= OnIsToggledChanged; toggleButton.IsToggled = true; toggleButton.IsToggledChanged += OnIsToggledChanged; } }
/// <summary> /// Untoggle without event raise /// </summary> private void UnToggle(IToggable toggleButton) { if (toggleButton.IsToggled) { toggleButton.IsToggledChanged -= OnIsToggledChanged; toggleButton.IsToggled = false; toggleButton.IsToggledChanged += OnIsToggledChanged; } }
/// <summary> /// Event handler when focused index changes in Source. Update togglebutton. /// </summary> private void OnCurrentItemIndexChanged(object sender, int index) { IToggable focusedToggleButton = _children[index].Child as IToggable; if (_currentToggledButton != null && _currentToggledButton != focusedToggleButton) { UnToggle(_currentToggledButton); } if (focusedToggleButton != _currentToggledButton) { _currentToggledButton = focusedToggleButton; Toggle(focusedToggleButton); } }