CommandBarFlyout и OverlayInputPassThroughElement - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу сделать, когда я нажимаю на элемент 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!");
}

Или, может быть, вы можете сказать мне, как это сделать правильно

1 Ответ

0 голосов
/ 21 февраля 2019

Я решил проблему, заменив Tapped на ItemClick в 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!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...