/// <summary> /// Prepares the specified element to display the specified item. /// </summary> /// <param name="element">Element used to display the specified item.</param> /// <param name="item">Specified item.</param> protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); DropDownItemBaseControl control = item as DropDownItemBaseControl; if (control != null) { control.ParentDropDownList = this; } }
/// <summary> /// Invoked when the <see cref="E:System.Windows.UIElement.KeyDown" /> event is received. /// </summary> /// <param name="e">Information about the event.</param> protected override void OnKeyDown(KeyRoutedEventArgs e) { if (!e.Handled) { switch (e.Key) { case VirtualKey.Left: case VirtualKey.Up: goto Label_0046; case VirtualKey.Right: case VirtualKey.Down: goto Label_0056; case VirtualKey.Escape: Close(); e.Handled = true; break; case VirtualKey.Tab: if (CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift) == CoreVirtualKeyStates.None) { goto Label_0056; } goto Label_0046; case VirtualKey.Enter: if (SelectedItemIndex >= 0) { DropDownItemBaseControl control = base.ContainerFromIndex(SelectedItemIndex) as DropDownItemBaseControl; if (control != null) { if (!control.CanExecuteCommand()) { break; } control.ExecuteCommand(); } } Close(); e.Handled = true; break; } } goto Label_00C3; Label_0046: SelectNextItem(false); e.Handled = true; goto Label_00C3; Label_0056: SelectNextItem(true); e.Handled = true; Label_00C3: base.OnKeyDown(e); }
bool SelectItem(int index, bool forward) { DropDownItemBaseControl control = base.ContainerFromIndex(index) as DropDownItemBaseControl; if ((control == null) || !control.CanSelect) { return(false); } if (SelectedItemIndex >= 0) { DropDownItemBaseControl control2 = base.ContainerFromIndex(SelectedItemIndex) as DropDownItemBaseControl; if (control2 != null) { control2.IsSelected = false; } } control.IsSelected = true; control.SelectChild(forward); SelectedItemIndex = index; return(true); }