2016-06-07 91 views
2

在我的按钮的点击事件中,我有几个异步的方法,我希望他们在按钮的Flyout内容显示之前完成。无论如何都要将Flyout内容从显示中延迟出来,还是在点击与其关联的按钮时总是显示?如何延迟Button.Flyout出现?

+0

也许你可以火从后面代码的弹出窗口,一旦你的工作完成? – Romasz

+0

我一直在寻找,如果我可以,但还没有找到方法。有一个隐藏函数调用,但我没有看到显示功能 – Lotzi11

+0

只需将弹出窗口与按钮相关联,否则它将自动显示。与其他元素关联或在资源中定义,然后从代码'yourFlyout.ShowAt(UIElement);'调用。 – Romasz

回答

2

在您的情况下,不要将弹出窗口与按钮相关联,因为它会自动显示。相反,在资源或其他元素中定义您的弹出窗口,然后从代码中调用它。样品的例子可以是这样的:

<Grid x:Name="RootGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <FlyoutBase.AttachedFlyout> 
     <MenuFlyout> 
      <MenuFlyoutItem Text="Edit"/> 
      <MenuFlyoutItem Text="Delete"/> 
     </MenuFlyout> 
    </FlyoutBase.AttachedFlyout> 
    <Button Content="Click" Click="Button_Click"> 
     <Button.Resources> 
      <MenuFlyout x:Key="secondFlyout"> 
       <MenuFlyoutItem Text="Edit"/> 
       <MenuFlyoutItem Text="Delete"/> 
      </MenuFlyout> 
     </Button.Resources> 
    </Button> 
</Grid> 

后面的代码:

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    await Task.Delay(2000); // your heavy job you want ot wait for 
    var thisButton = sender as FrameworkElement; 
    // first method 
    (thisButton.Resources["secondFlyout"] as FlyoutBase).ShowAt(thisButton); 
    // second method 
    // FlyoutBase.GetAttachedFlyout(RootGrid).ShowAt(thisButton); 
}