是否可以临时postpane显示AppBarButton的附属Flyout?

时间:2014-10-31 22:10:15

标签: windows-runtime winrt-xaml winrt-async flyout winrt-component

我在AppBarButton中嵌入了一个Flyout,如下所示:

<AppBarButton x:Name="appbarbtnOpenPhotosets" Icon="OpenFile" Label="Open Existing Photoset[s]" AutomationProperties.Name="Open File" Tapped="appbarbtnOpenPhotosets_Tapped" >
    <Button.Flyout>
    . . .
    </Button.Flyout>
</AppBarButton>

在某些情况下,我希望首先向用户提供在查看弹出窗口之前重命名文件的机会。我试着看看它是否会像这样:

async private void appbarbtnOpenPhotosets_Tapped(object sender, TappedRoutedEventArgs args)
{
    // Want to conditionally postpone the operation
    bool myBucketsGotAHoleInIt = PhotraxUtils.GetLocalSetting(CAINT_BUY_NO_BEER);
    if (myBucketsGotAHoleInIt)
    {
        MessageDialog dlgDone = new MessageDialog("Can you see me now?");
        await dlgDone.ShowAsync();
        args.Handled = false; // <= adding this made no difference
    }
}

这是有效的,因为我看到了“你能看到我吗?”对话框,但这可以防止Flyout飞出来。不会飞出的飞出物并不比没有在空中运动的飞鼠或鱼类更有用。

那我怎么能暂时压制我的弹出窗口然后再打电话呢? Flyout没有Open()方法......有没有其他方法可以调用它?

1 个答案:

答案 0 :(得分:1)

单击控件时,附加到按钮的弹出按钮会自动打开。 如果您不想让它自动打开,您需要将其附加到另一个控件。

取自official documentation

的示例
<!-- Flyout declared inline on a FrameworkElement -->
<TextBlock>
    <FlyoutBase.AttachedFlyout>
        <Flyout>
        <!-- Flyout content -->
        </Flyout>
    </FlyoutBase.AttachedFlyout>
</TextBlock>

然后,您可以随时显示Flyout,调用FlayoutBase.ShowAttachedFlyout()并传递控件的FrameworkElement已转换值。

FlyoutBase.ShowAttachedFlyout(frameworkElement);

所以,在你的情况下:

async private void appbarbtnOpenPhotosets_Tapped(object sender, TappedRoutedEventArgs args)
{
    // Want to conditionally postpone the operation
    bool myBucketsGotAHoleInIt = PhotraxUtils.GetLocalSetting(CAINT_BUY_NO_BEER);
    if (myBucketsGotAHoleInIt)
    {
        MessageDialog dlgDone = new MessageDialog("Can you see me now?");
        await dlgDone.ShowAsync();
        // New code
        FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
    }
}

如果您无法更改控件,则应该可以使用我Button而不是TextBlock发布的代码。我对此不太确定,但你可以试试。

相关问题