【问题标题】:How to Delay Button.Flyout from Appearing?如何延迟 Button.Flyout 的出现?
【发布时间】:2016-10-07 15:26:00
【问题描述】:

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

【问题讨论】:

  • 也许你可以在你的工作完成后从后面的代码中触发你的弹出窗口?
  • 我一直在寻找是否可以,但还没有找到方法。有一个隐藏函数调用,但我没有看到显示函数
  • 只是不要将弹出框与按钮关联,否则会自动显示。与其他元素关联或在资源中定义,然后从代码yourFlyout.ShowAt(UIElement); 调用。
  • 不错的主意。我会试一试,让你知道
  • 我找到了一些时间来试用代码并使其成为答案。

标签: c# uwp flyout


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多