예제 #1
0
        private void OnContextRequested(UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs args)
        {
            var container = sender as ListViewItem;

            if (container.Content is ISessionService session && !session.IsActive)
            {
            }
예제 #2
0
        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;
                        }
                    }
                }
            }
        }
예제 #3
0
 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;
            }
        }