private void OnContextRequested(UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs args) { var container = sender as ListViewItem; if (container.Content is ISessionService session && !session.IsActive) { }
private static void UiElement_ContextRequested(UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs args) { if (SelectorDict.TryGetValue(sender, out var flyoutTemplateSelector)) { object dataContext = null; FrameworkElement element = null; // コントローラ操作かつListViewBase系コントロールの場合に対応する // フォーカスできるUIはListViewItemのItemContainer側に限定されるため // ListViewItemやGriViewItemの基底クラスであるContentControlまでダウンキャストしている if (args.OriginalSource is ContentControl) { var contentControl = args.OriginalSource as ContentControl; dataContext = contentControl.Content; element = contentControl.ContentTemplateRoot as FrameworkElement; } else if (args.OriginalSource is FrameworkElement) { element = args.OriginalSource as FrameworkElement; dataContext = element?.DataContext; } if (dataContext != null) { var template = flyoutTemplateSelector.SelectTemplate(dataContext, element); if (template != null) { FlyoutBase flyout = template.LoadContent() as FlyoutBase; if (flyout != null) { // elementのDataContextがFlyoutに注入された上で表示される flyout.ShowAt(element); args.Handled = true; } } } } }
private void Control_ContextRequested(UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs args) { rectShapeEnable = !rectShapeEnable; }
private void SongList_ContextRequested(UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs args) { // Walk up the tree to find the ListViewItem. // There may not be one if the click wasn't on an item. var requestedElement = (FrameworkElement)args.OriginalSource; while ((requestedElement != sender) && !(requestedElement is SelectorItem)) { requestedElement = (FrameworkElement)VisualTreeHelper.GetParent(requestedElement); } var model = (sender as ListViewBase).ItemFromContainer(requestedElement) as SongViewModel; if (requestedElement != sender) { // set album name of flyout var albumMenu = MainPage.Current.SongFlyout.Items.First(x => x.Name == "AlbumMenu") as MenuFlyoutItem; albumMenu.Text = model.Album; albumMenu.Visibility = Visibility.Collapsed; // remove performers in flyout var index = MainPage.Current.SongFlyout.Items.IndexOf(albumMenu); while (!(MainPage.Current.SongFlyout.Items[index + 1] is MenuFlyoutSeparator)) { MainPage.Current.SongFlyout.Items.RemoveAt(index + 1); } // add song's performers to flyout if (!model.Song.Performers.IsNullorEmpty()) { if (model.Song.Performers.Length == 1) { var menuItem = new MenuFlyoutItem() { Text = $"{model.Song.Performers[0]}", Icon = new FontIcon() { Glyph = "\uE136" } }; menuItem.Click += MainPage.Current.MenuFlyoutArtist_Click; MainPage.Current.SongFlyout.Items.Insert(index + 1, menuItem); } else { var sub = new MenuFlyoutSubItem() { Text = $"{Consts.Localizer.GetString("PerformersText")}:", Icon = new FontIcon() { Glyph = "\uE136" } }; foreach (var item in model.Song.Performers) { var menuItem = new MenuFlyoutItem() { Text = item }; menuItem.Click += MainPage.Current.MenuFlyoutArtist_Click; sub.Items.Add(menuItem); } MainPage.Current.SongFlyout.Items.Insert(index + 1, sub); } } if (args.TryGetPosition(requestedElement, out var point)) { MainPage.Current.SongFlyout.ShowAt(requestedElement, point); } else { MainPage.Current.SongFlyout.ShowAt(requestedElement); } args.Handled = true; } }