uwp - CommandBarFlyout 和 OverlayInputPassThroughElement
问题描述
GridView
当我单击元素时,我想做的事情CommandBarFlyout
是关闭并且单击元素。我试图分配值OverlayInputPassThroughElement sender as FrameworkElement
。但我还需要点击两次。
XAML:
<Page.Resources>
<CommandBarFlyout x:Name="CommandBarFlyout1"
Placement="RightEdgeAlignedTop">
<AppBarButton x:Name="EditButton1"
Label="Edit"
Icon="Edit"/>
<AppBarButton x:Name="DeleteButton1"
Label="Delete"
Icon="Delete"/>
</CommandBarFlyout>
</Page.Resources>
<Grid>
<GridView Padding="20">
<GridView.ItemTemplate>
<DataTemplate>
<Grid PointerEntered="Grid_PointerEntered"
PointerExited="Grid_PointerExited"
Tapped="Grid_Tapped">
<Border Height="200" Width="200">
<TextBlock Text="{Binding}"
FontSize="48" Foreground="Green"/>
</Border>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.Items>
<x:String>One</x:String>
<x:String>Two</x:String>
</GridView.Items>
</GridView>
</Grid>
CS:
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
{
FlyoutShowOptions myOption = new FlyoutShowOptions();
myOption.ShowMode = FlyoutShowMode.Transient;
myOption.Placement = FlyoutPlacementMode.RightEdgeAlignedTop;
CommandBarFlyout1.OverlayInputPassThroughElement = sender as FrameworkElement;
CommandBarFlyout1.ShowAt(sender as FrameworkElement, myOption);
}
private void Grid_PointerExited(object sender, PointerRoutedEventArgs e)
{
CommandBarFlyout1.OverlayInputPassThroughElement = null;
CommandBarFlyout1.Hide();
}
private void Grid_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("Grid Click!");
}
或者你可以告诉我如何正确地做
解决方案
Tapped
我通过替换ItemClick
in解决了这个问题GridView
<Grid>
<GridView Padding="20"
IsItemClickEnabled="True"
ItemClick="GridView_ItemClick">
<GridView.ItemTemplate>
<DataTemplate>
<Grid PointerEntered="Grid_PointerEntered">
<Border Height="200" Width="200">
<TextBlock Text="{Binding}"
FontSize="48" Foreground="Green"/>
</Border>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.Items>
<x:String>One</x:String>
<x:String>Two</x:String>
</GridView.Items>
</GridView>
</Grid>
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
{
FlyoutShowOptions myOption = new FlyoutShowOptions();
myOption.ShowMode = FlyoutShowMode.Transient;
myOption.Placement = FlyoutPlacementMode.RightEdgeAlignedTop;
CommandBarFlyout1.ShowAt(e.OriginalSource as FrameworkElement, myOption);
}
private void GridView_ItemClick(object sender, ItemClickEventArgs e)
{
Debug.WriteLine("Grid Click!");
}