Показать всплывающее окно с помощью BottomAppBar
-
26-12-2019 - |
Вопрос
Я пытаюсь показать простое всплывающее окно (с информационным содержимым), когда нажимается AppBarToggleButton в BottomAppBar, но мое решение не работает.:(
Это мой код:
<Page.BottomAppBar>
<CommandBar>
<AppBarToggleButton x:Uid="MapPageAppBarLegend" Label="" Icon="List">
<FlyoutBase.AttachedFlyout>
<Flyout>
<TextBlock Text="Informations here..."/>
</Flyout>
</FlyoutBase.AttachedFlyout>
</AppBarToggleButton>
</CommandBar>
</Page.BottomAppBar>
Ничего не появляется..Может ли кто-нибудь помочь мне показать этот макет?Большое спасибо и извините за мой английский.:)
Пейм
Решение
Все довольно четко описано в MSDN (там также есть очень хороший пример):
Ничего не появляется, потому что всплывающие окна открываться автоматически только для кнопок (и AppBarToggleButton не происходит от Button
сорт):
Всплывающее меню, прикрепленное к кнопке, открывается автоматически, когда пользователь нажимает кнопку.Чтобы открыть всплывающее окно, вам не нужно обрабатывать какие-либо события.(Сюда входят элементы управления, производные от Button, например AppBarButton
Конечно, вы можете добавить Flyout
любому FrameworkElement
но вам придется открыть его вручную:
Вы можете прикрепить элемент управления Flyout к любому объекту FrameworkElement с помощью прикрепленного свойства FlyoutBase.AttachedFlyout.В этом случае вам придется отреагировать на взаимодействие с FrameworkElement, например на событие Tapped, и открыть всплывающее окно в своем коде.
В XAML — определите свой Flyout
в Ресурсах и прикрепите его к кнопке:
<Page.Resources>
<Flyout x:Key="myFlyout" Placement="Top">
<TextBlock Text="Informations here..."/>
</Flyout>
</Page.Resources>
<Page.BottomAppBar>
<CommandBar>
<AppBarToggleButton x:Uid="MapPageAppBarLegend" Label="First" Icon="List"
FlyoutBase.AttachedFlyout="{StaticResource myFlyout}"
Click="AppBarToggleButton_Click"/>
</CommandBar>
</Page.BottomAppBar>
И событие в коде позади:
private void AppBarToggleButton_Click(object sender, RoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}