0

我在 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>

在某些情况下,我想首先向用户展示在看到 Flyout 之前重命名文件的机会。我试着看看这是否会像这样工作:

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 并不比不会在空中移动的飞鼠或鱼更有用。

那么我怎样才能暂时抑制我的弹出,然后再调用它呢?Flyout 没有 Open() 方法……还有其他方法可以调用它吗?

4

1 回答 1

1

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

取自官方文档的示例:

<!-- 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. 我不确定这个,但你可以试试。

于 2014-11-02T12:19:35.077 回答