Mostrar o submenu utilizando BottomAppBar
-
26-12-2019 - |
Pergunta
Eu estou a tentar mostrar um simples Submenu (com conteúdo informativo) quando um AppBarToggleButton dentro BottomAppBar é pressionado, mas a minha solução não funciona.:(
Este é o meu código:
<Page.BottomAppBar>
<CommandBar>
<AppBarToggleButton x:Uid="MapPageAppBarLegend" Label="" Icon="List">
<FlyoutBase.AttachedFlyout>
<Flyout>
<TextBlock Text="Informations here..."/>
</Flyout>
</FlyoutBase.AttachedFlyout>
</AppBarToggleButton>
</CommandBar>
</Page.BottomAppBar>
Não aparece nada..Alguém pode me ajudar a mostrar isso flayout?Muito obrigado e desculpe pelo meu inglês.:)
Pame
Solução
Tudo é claramente descrita no MSDN (há também um exemplo muito bom de lá):
Não aparece nada, porque Menus suspensos abrir automaticamente apenas para os botões (e AppBarToggleButton não derivar de Button
classe):
Um submenu é anexado a um botão se abre automaticamente quando o usuário clica no botão.Você não precisa lidar com todos os eventos para abrir o submenu.(Isto inclui controles de derivados de Botão, como AppBarButton
É claro que você pode adicionar um Flyout
para qualquer FrameworkElement
mas você terá que abri-lo manualmente:
Você pode anexar um controle menu Suspenso para qualquer FrameworkElement objeto usando o FlyoutBase.AttachedFlyout propriedade anexada.Se você fizer isso, você deve responder a uma interação no FrameworkElement, tais como a Virada do evento, e abrir o Submenu seu código.
Em XAML - definir o seu Flyout
em Recursos e anexá-lo para o botão:
<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>
E o evento em code-behind:
private void AppBarToggleButton_Click(object sender, RoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}