簡體   English   中英

Flyout的“輕度解雇”需要2個點擊才能打開下一個彈出窗口

[英]Flyout's “Light Dismissal” Causing 2 Taps to be Required to Open Next Flyout

點擊時,我有兩個顯示Flyout的按鈕。 我以與XAML UI Basics示例中演示的相同方式顯示它們:

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

我的問題是,如果按鈕1的彈出窗口打開,屏幕上的下一個點擊將關閉彈出按鈕。 這很好,但如果下一個點擊恰好在按鈕2上,我想要觸發按鈕的點擊事件並打開它的彈出按鈕。 相反,該按鈕根本不會注冊一個水龍頭,而是關閉按鈕1的彈出按鈕。

這導致需要點擊兩次 - 一次點擊按鈕1的彈出按鈕,另一次點擊按鈕2的彈出按鈕。

換一種說法:

當前流程:

  1. 點擊按鈕1
  2. 按鈕1的彈出按鈕打開
  3. 點擊按鈕2
  4. 按鈕1的彈出按鈕關閉,(按鈕2,也沒有Page注冊水龍頭)
  5. 點擊按鈕2
  6. 現在按鈕2的彈出按鈕打開了

我在找什么:

  1. 點擊按鈕1
  2. 按鈕1的彈出按鈕打開
  3. 點擊按鈕2
  4. 按鈕1的彈出按鈕關閉, 按鈕2的彈出按鈕打開

我怎樣才能做到這一點? 我已經嘗試攔截該頁面的Tapped事件,但是當彈出窗口打開時,它似乎攔截了Tapped事件,因此它可以用於Flyout的輕度解雇

覆蓋Flyout的風格,還是FlyoutPresenterStyle會幫助我? 或者也許以更MVVM的方式打開Flyout,這樣我就可以更好地控制Flyout的打開/關閉方式?

我不確定如何解決這個問題!

這是我在Microsoft文檔中找到的內容:

當使用水龍頭解雇時,此手勢通常被吸收而不會傳遞到下方的UI。 例如,如果在打開的彈出窗口后面有一個按鈕,則用戶的第一次點擊會解除彈出按鈕,但不會激活此按鈕。 按下按鈕需要再次點擊。

您可以通過將按鈕指定為彈出按鈕的輸入傳遞元素來更改此行為。 由於上述輕度消除操作,彈出按鈕將關閉,並且還會將點擊事件傳遞給其指定的OverlayInputPassThroughElement。 考慮采用此行為來加速用戶在功能相似的項目上的交互。 如果您的應用程序具有收藏夾集合並且集合中的每個項目都包含附加的彈出按鈕,則可以合理地期望用戶可能希望快速連續地與多個彈出窗口進行交互。

[!注意]注意不要指定疊加輸入傳遞元素,這會導致破壞性操作。 用戶已習慣於不會激活主UI的謹慎輕松解雇操作。 關閉,刪除或類似的破壞性按鈕不應在輕度關閉時激活,以避免意外和破壞性行為。 在以下示例中,FavoritesBar中的所有三個按鈕將在第一次點擊時激活。

<Page>
<Page.Resources>
    <Flyout x:Name="TravelFlyout" x:Key="TravelFlyout"
            OverlayInputPassThroughElement="{x:Bind FavoritesBar}">
        <StackPanel>
            <HyperlinkButton Content="Washington Trails Association"/>
            <HyperlinkButton Content="Washington Cascades - Go Northwest! A Travel Guide"/>  
        </StackPanel>
    </Flyout>
</Page.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel x:Name="FavoritesBar" Orientation="Horizontal">
        <HyperlinkButton x:Name="PageLinkBtn">Bing</HyperlinkButton>  
        <Button x:Name="Folder1" Content="Travel" Flyout="{StaticResource TravelFlyout}"/>
        <Button x:Name="Folder2" Content="Entertainment" Click="Folder2_Click"/>
    </StackPanel>
    <ScrollViewer Grid.Row="1">
        <WebView x:Name="WebContent"/>
    </ScrollViewer>
</Grid>

private void Folder2_Click(object sender, RoutedEventArgs e){
 Flyout flyout = new Flyout();
 flyout.OverlayInputPassThroughElement = FavoritesBar;

 flyout.ShowAt(sender as FrameworkElement);}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM