У меня есть AppBar страницы, который содержит CommandBar в этой командной строке. У меня есть кнопки AppBar, которые при нажатии открывают MenuFlyout, как показано ниже:
<AppBarButton Icon="World" Label="Maps" ToolTipService.ToolTip="Map Providers!" IsCompact="True">
<AppBarButton.Flyout>
<MenuFlyout>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">Unison Maps</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">Google Maps</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">Bing Maps</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">OpenStreetMap</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">OpenCycleMap</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">OCM Transport</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">OCM Landscape</MenuFlyoutItem>
<MenuFlyoutItem Click="mapProviderMenuFlyoutItem_Click">MapQuest OSM</MenuFlyoutItem>
</MenuFlyout>
</AppBarButton.Flyout>
</AppBarButton>
Первая кнопка отлично работает, она отображает все пункты меню в выпадающем меню, однако другие кнопки выделяют элементы меню, поскольку MenuFlyout недостаточно велико, чтобы отображать все результаты.
Вышеупомянутый код может быть добавлен несколько раз в проект и приводит к той же ошибке.
У кого-нибудь есть решение для этого?
EDIT: кажется, это известная ошибка. См. Этот ответ для обходного пути.
Я не думаю, что MenuFlyout
предназначен для использования с AppBarButton
. Это больше подходит в качестве меню longpress в ListViewItem
. В любом случае, я никогда не видел MenuFlyout
использовался в AppBarButton
в любых официальных приложениях Microsoft. Обычно вместо этого они будут использовать ListPickerFlyout
.
Например, вы можете использовать следующий XAML:
<Page
x:Class="App7.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Page.BottomAppBar>
<CommandBar>
<AppBarButton Icon="World" Label="Maps" ToolTipService.ToolTip="Map Providers!" IsCompact="True">
<AppBarButton.Flyout>
<ListPickerFlyout ItemsSource="{Binding MapProviders}" />
</AppBarButton.Flyout>
</AppBarButton>
</CommandBar>
</Page.BottomAppBar>
<Grid></Grid>
</Page>
с кодом позади:
public sealed partial class MainPage : Page
{
public List<string> MapProviders { get; private set; }
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
MapProviders = new List<string>
{
"Unison Maps",
"Google Maps",
"Bing Maps",
"OpenStreetMap",
"OpenCycleMap",
"OCM Transport",
"OCM Landscape",
"MapQuest OSM"
};
}
}
для создания такого всплывающего окна (которое прокручивается):
Конечно, это очень упрощенный пример, и вы можете установить ItemsSource
другими способами.