我在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()方法......有没有其他方法可以调用它?
答案 0 :(得分: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
发布的代码。我对此不太确定,但你可以试试。