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() >------------
}
|