如何延迟Button.Flyout出现?

时间:2016-06-07 16:05:29

标签: c# uwp flyout

在我的按钮的点击事件中,我有几个异步的方法,我希望它们在按钮的Flyout内容显示之前完成。无论如何都要延迟展示Flyout内容,还是会在点击与其关联的按钮时始终显示?

1 个答案:

答案 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);
}