在我的按钮的点击事件中,我有几个异步的方法,我希望它们在按钮的Flyout内容显示之前完成。无论如何都要延迟展示Flyout内容,还是会在点击与其关联的按钮时始终显示?
答案 0 :(得分: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);
}