0

У меня выпадающей встроенный внутри AppBarButton как так:Возможно ли временно отложить всплывающее отображение входящего потока AppBarButton?

<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

Всплывающие кнопки, прикрепленные к кнопкам, автоматически открываются при нажатии на элемент управления. Если вы не хотите, чтобы он открывался автоматически, вам нужно прикрепить его к другому элементу управления.

Пример взят из official documentation:

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

Тогда вы можете показать плавающем всякий раз, когда вы хотите, вызывая 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. Я не уверен в этом, но вы можете попробовать.

Смежные вопросы