#

UWP: Flyout Menü an der Cursor Position anzeigen

 

Wie zeigt man ein ContextMenü genau an der Position des Cursors an ?

Ich möchte ein MenuFlyout als Kontextmenü anzeigen. Leider wird im normalen menuFlyout.Showat(..) das Contextmenü immer nur zentral angezeigt.

 

Lösung:

Das Menü wird als MenuFlyout genau an der Position des Cursors angezeigt, wenn man den zweiten Parameter Point festlegt.

Dieser kann über die RightTappedRoutedEventArgs e ermittelt werden, indem man hier mit GetPosition den aktuellen Punkt relativ im Control ermittelt.

 

Gelöster Code in C#

        private void ctlFolders_RightTapped(object sender, RightTappedRoutedEventArgs e)

        {

            //------------< ctlFolders_RightTapped() >------------

            menuFolderTitle.ShowAt(ctlFolders,e.GetPosition(ctlFolders));

            //------------</ ctlFolders_RightTapped() >------------

        }

 

als Video Tutorial

Xaml eines großen Elements einer Langen Liste

<ListBox Grid.Row="1"  x:Name="ctlFolders" Height="{Binding ElementName=stack_Folders_Select, Path=ActualHeight }"

                       Background="#eeeeee"  HorizontalAlignment="Stretch"

                       SelectionChanged="ctlNavBar_Folders_SelectionChanged" 

                       ScrollViewer.VerticalScrollBarVisibility="Visible"

                       ScrollViewer.VerticalScrollMode="Enabled"  

                       KeyUp="ctlNavBar_Folders_KeyUp" Loaded="ctlNavBar_Folders_Loaded" 

                        SelectionMode="Extended"  RightTapped="ctlFolders_RightTapped"

                       >

                    <ListBox.ItemContainerStyle>

                        <Style TargetType="ListBoxItem">

                            <Setter Property="Padding" Value="0"/>

                            <Setter Property="Margin" Value="0"/>

                        </Style>

                    </ListBox.ItemContainerStyle>

                    <Flyout>

                        <Button></Button>

                    </Flyout>

                    <FlyoutBase.AttachedFlyout >

                        <MenuFlyout x:Name="menuFolderTitle" Placement="Right"  >

                            <MenuFlyoutItem  Text="Open Explorer" FlowDirection="LeftToRight" ></MenuFlyoutItem>

                        </MenuFlyout>

                    </FlyoutBase.AttachedFlyout>

                </ListBox>

 

 

 

Einfache Anzeige immer in der Mitte des Elements

Nur ein Parameter in der Übergabe von ShowAt

        private void ctlFolders_RightTapped(object sender, RightTappedRoutedEventArgs e)

        {

            //------------< ctlFolders_RightTapped() >------------

            menuFolderTitle.ShowAt(ctlFolders);

            //------------</ ctlFolders_RightTapped() >------------

        }

 

Mobile

.