2017-02-08 11 views
0

Я хочу показать простое меню всплывающих окон в gridviewitem. Согласно этой статье здесь: https://blogs.msdn.microsoft.com/winuiautomation/2016/01/01/ten-questions-on-programmatic-accessibility/, (параграф 6) вы должны иметь возможность просто настроить обработчик для события с двойным нажатием. Я также тестировал его на экране телефона ui.Отображение flyoutmenu на элементе gridview во время отображения активного участника

Проблема заключается в том, что в моем приложении обработчик doubletap никогда не вызывается при выполнении жестов двойного касания с двумя пальцами, когда рассказчик активирован.

Я пытался сделать это в моей GridView:

<GridView x:Name="ImgGrid" 
ItemsSource="{x:Bind AllFiles, Mode=OneWay}" 
IsItemClickEnabled="True" 
SelectionMode="None" 
Background="{ThemeResource PaneBackgroundBrush}" Padding="8" 
ItemClick="ImgGrid_ItemClick" 
ItemContainerStyle="{StaticResource GridViewItemContainerStyle}" 
IsDoubleTapEnabled="True" 
DoubleTapped="ImgGrid_DoubleTapped"> 

Как вы можете видеть, doubletapped флаг включен и есть обработчик приложенный для doubletapped события. Но он не вызван двойным жестом с двумя пальцами. Тем не менее, на немобильных устройствах обработчик вызывается путем правого щелчка по элементу gridview.

Я также попытался поставить EventHandler на самом gridviewitem:

<DataTemplate x:DataType="data:KNFBFileInfo"> 
    <Grid x:Name="ThumbnailContainer" 
     Margin="8" 
     Width="80" 
     Background="Transparent" 
     MinHeight="100" 
     Height="Auto" 
     Holding="ThumbnailContainer_Holding" 
     RightTapped="ThumbnailContainer_RightTapped"> 

тот же результат, что и первое, что я попытался ...

Это действительно позор, что это так трудно для разработчика сделать его приложение доступно

+0

Вы пытались добавить обработчик в сетке DataTemplate, а не GridView, так же, как вы добавили обработчик RightTapped? – AbsoluteSith

+0

Да, у datatemplate нет этого свойства – PrisonMike

ответ

0

Я только что создал пример приложения с MenyFlyout внутри DataTemplate

<DataTemplate x:Name="LastItems"> 
    <Grid RightTapped="Grid_RightTapped"> 
     <FlyoutBase.AttachedFlyout> 
      <MenuFlyout> 
       <MenuFlyoutItem Text="Item1"/> 
       <MenuFlyoutItem Text="Item2"/> 
       <MenuFlyoutItem Text="Item3"/> 
      </MenuFlyout> 
     </FlyoutBase.AttachedFlyout> 
     <TextBlock Text="{Binding ''}" Padding="10" Margin="10,0" /> 
    </Grid> 
</DataTemplate> 

А затем Grid_RightTapped способ заключается в следующем.

private void Grid_RightTapped(object sender, RightTappedRoutedEventArgs e) 
{ 
    FrameworkElement element = sender as FrameworkElement; 
    if (element != null) FlyoutBase.ShowAttachedFlyout(element); 
} 

Делая это, когда я правой кнопкой мыши на стационарных устройств и LongPress по пунктам на мобильных устройствах, Flyout показывает с каких-либо проблем.

+0

Да, но это не проблема. Проблема заключается в том, что меню должно открываться двойным нажатием 2-х пальцев, когда рассказчик активен. (это должно произойти автоматически, когда прикреплен правый обработчик) – PrisonMike

0

Существует официальный документ о "Narrator". Когда мы дважды нажимаем одним пальцем или удерживаем одним пальцем и коснемся секунды, он активирует основное действие. Это означает, что мы нажимаем элемент один раз без «Рассказчика». Таким образом, событие DoubleTapped никогда не будет запущено.

Когда мы дважды коснемся двумя пальцами, он отобразит контекстное меню элемента управления. Мы должны иметь возможность добавить RightTapped в GridView. Когда мы дважды коснемся двумя пальцами, будет запущен RightTapped.

Кажется, мы не можем выбрать GridViewItem в режиме «Рассказчик». Если мы добавим событие SelectionChanged в GridView, когда мы дважды коснемся GridViewItem, SelectionChanged никогда не будет запущен.

+0

Итак, нет способа выбрать gridviewitem, и поэтому контекстное меню не отображается? Есть ли обходной путь? – PrisonMike

+0

@PrisonMike Как я знал, когда мы используем палец, мы не можем получить точку на 'GridViewItem'. –

+0

ОК спасибо за информацию – PrisonMike