private void NavView_ItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args) { //// Temp Workaround for WinUI Bug https://github.com/microsoft/microsoft-ui-xaml/issues/2520 var invokedItem = args.InvokedItem; if (invokedItem is FrameworkElement fe && fe.DataContext is SampleCategory cat2) { invokedItem = cat2; } //// End Workaround - args.InvokedItem // UNO TODO // force materialization FindName("SamplePickerGrid"); if (invokedItem is SampleCategory category) { if (SamplePickerGrid.Visibility != Visibility.Collapsed && _selectedCategory == category) { // The NavView fires this event twice when the current selected item is clicked // This makes sure the event get's processed correctly var nop = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => HideSamplePicker()); } else { _selectedCategory = category; ShowSamplePicker(category.Samples, true); // Then Focus on Picker dispatcherQueue.EnqueueAsync(() => SamplePickerGridView.Focus(FocusState.Keyboard)); } } }
private void SearchBox_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e) { if (e.Key == Windows.System.VirtualKey.Down && SamplePickerGrid.Visibility == Windows.UI.Xaml.Visibility.Visible) { // If we try and navigate down out of the textbox (and there's search results), go to the search results. DispatcherHelper.ExecuteOnUIThreadAsync(() => SamplePickerGridView.Focus(FocusState.Keyboard)); } }
private void SamplePickerGridView_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) { SamplePickerGrid.RegisterPropertyChangedCallback(UIElement.VisibilityProperty, (s, args) => { if (s is UIElement samplePicker && samplePicker.Visibility == Visibility.Visible) { DispatcherHelper.ExecuteOnUIThreadAsync(() => SamplePickerGridView.Focus(FocusState.Keyboard)); } });
private void ContainerItem_Loaded(object sender, RoutedEventArgs e) { var itemsPanel = (ItemsWrapGrid)SamplePickerGridView.ItemsPanelRoot; var itemContainer = (GridViewItem)sender; itemContainer.Loaded -= this.ContainerItem_Loaded; var button = itemContainer.FindDescendant <Button>(); if (button != null) { button.Click -= MoreInfoClicked; button.LostFocus -= MoreInfoLostFocus; button.Click += MoreInfoClicked; button.LostFocus += MoreInfoLostFocus; } var itemIndex = SamplePickerGridView.IndexFromContainer(itemContainer); var referenceIndex = itemsPanel.FirstVisibleIndex; if (SamplePickerGridView.SelectedIndex >= 0) { referenceIndex = SamplePickerGridView.SelectedIndex; } var relativeIndex = Math.Abs(itemIndex - referenceIndex); if (itemContainer.Content != CurrentSample && itemIndex >= 0 && itemIndex >= itemsPanel.FirstVisibleIndex && itemIndex <= itemsPanel.LastVisibleIndex) { var staggerDelay = TimeSpan.FromMilliseconds(relativeIndex * 30); var animationCollection = new AnimationCollection() { new OpacityAnimation() { From = 0, To = 1, Duration = TimeSpan.FromMilliseconds(400), Delay = staggerDelay, SetInitialValueBeforeDelay = true }, new ScaleAnimation() { From = "0.9", To = "1", Duration = TimeSpan.FromMilliseconds(400), Delay = staggerDelay } }; VisualExtensions.SetNormalizedCenterPoint(itemContainer, "0.5"); animationCollection.StartAnimation(itemContainer); } }
private void HideMoreInfo() { if (MoreInfoImage != null && MoreInfoContent.DataContext != null) { ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("sample_icon", MoreInfoImage); } MoreInfoCanvas.Visibility = Visibility.Collapsed; if (MoreInfoImage != null && MoreInfoContent.DataContext != null) { var animation = ConnectedAnimationService.GetForCurrentView().GetAnimation("sample_icon"); animation.Configuration = new DirectConnectedAnimationConfiguration(); _ = SamplePickerGridView.TryStartConnectedAnimationAsync(animation, MoreInfoContent.DataContext, "SampleIcon"); } MoreInfoContent.DataContext = null; }
private void NavView_ItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args) { if (args.InvokedItem is SampleCategory category) { if (SamplePickerGrid.Visibility != Visibility.Collapsed && _selectedCategory == category) { // The NavView fires this event twice when the current selected item is clicked // This makes sure the event get's processed correctly var nop = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => HideSamplePicker()); } else { _selectedCategory = category; ShowSamplePicker(category.Samples, true); // Then Focus on Picker dispatcherQueue.EnqueueAsync(() => SamplePickerGridView.Focus(FocusState.Keyboard)); } } }
private void ContainerItem_Loaded(object sender, RoutedEventArgs e) { var itemsPanel = (ItemsWrapGrid)SamplePickerGridView.ItemsPanelRoot; var itemContainer = (GridViewItem)sender; itemContainer.Loaded -= this.ContainerItem_Loaded; var button = itemContainer.FindDescendant <Button>(); if (button != null) { button.Click -= MoreInfoClicked; button.LostFocus -= MoreInfoLostFocus; button.Click += MoreInfoClicked; button.LostFocus += MoreInfoLostFocus; } var itemIndex = SamplePickerGridView.IndexFromContainer(itemContainer); var referenceIndex = itemsPanel.FirstVisibleIndex; if (SamplePickerGridView.SelectedIndex >= 0) { referenceIndex = SamplePickerGridView.SelectedIndex; } var relativeIndex = Math.Abs(itemIndex - referenceIndex); if (itemContainer.Content != CurrentSample && itemIndex >= 0 && itemIndex >= itemsPanel.FirstVisibleIndex && itemIndex <= itemsPanel.LastVisibleIndex) { var staggerDelay = TimeSpan.FromMilliseconds(relativeIndex * 30); VisualExtensions.SetNormalizedCenterPoint(itemContainer, "0.5"); AnimationBuilder.Create() .Opacity(from: 0, to: 1, delay: staggerDelay) .Scale(from: 0.9, to: 1, delay: staggerDelay) .Start(itemContainer); } }
private async void UpdateSearchSuggestions(bool focus = false) { if (string.IsNullOrWhiteSpace(SearchBox.Text)) { HideSamplePicker(); return; } var samples = (await Samples.FindSamplesByName(SearchBox.Text)).OrderBy(s => s.Name).ToArray(); if (samples.Count() > 0) { ShowSamplePicker(samples); if (focus) { SamplePickerGridView.Focus(FocusState.Keyboard); } } else { HideSamplePicker(); } }
private void NavView_ItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args) { //// Temp Workaround for WinUI Bug https://github.com/microsoft/microsoft-ui-xaml/issues/2520 var invokedItem = args.InvokedItem; if (invokedItem is FrameworkElement fe && fe.DataContext is SampleCategory cat2) { invokedItem = cat2; } //// End Workaround - args.InvokedItem if (invokedItem is SampleCategory category) { if (SamplePickerGrid.Visibility != Visibility.Collapsed && _selectedCategory == category) { // The NavView fires this event twice when the current selected item is clicked // This makes sure the event get's processed correctly var nop = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => HideSamplePicker()); } else { _selectedCategory = category; ShowSamplePicker(category.Samples, true); // Then Focus on Picker DispatcherHelper.ExecuteOnUIThreadAsync(() => SamplePickerGridView.Focus(FocusState.Keyboard)); } } else if (args.IsSettingsInvoked) { HideSamplePicker(); if (NavigationFrame.CurrentSourcePageType != typeof(About)) { NavigateToSample(null); } } }