【问题标题】:Windows Phone 8.1 MenuFlyout Bug?Windows Phone 8.1 MenuFlyout 错误?
【发布时间】:2014-09-23 10:18:17
【问题描述】:

我有一个页面 AppBar,在此命令栏中包含一个命令栏

<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 不够大,无法显示所有结果。

以上代码可以在项目中多次添加,导致相同的bug。

有人对此有解决方案吗?

【问题讨论】:

    标签: c# xaml windows-phone-8.1 windows-store


    【解决方案1】:

    编辑:它似乎是一个已知的错误。请参阅this answer 了解解决方法。


    我不认为MenuFlyout 是为与AppBarButton 一起使用而设计的。它更适合作为ListViewItem 上的长按菜单。无论如何,我从未在任何官方 Microsoft 应用程序中看到在 AppBarButton 上使用过 MenuFlyout。通常他们会改用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

    【讨论】:

    • 微软这样做是为了向应用按钮添加上下文菜单。 msdn.microsoft.com/en-us/library/windows/apps/xaml/…。 Windows 商店应用程序的行为正确,而 Windows Phone 8.1 应用程序则不能。对我来说这似乎是一个错误。
    • 您当前的方法是我之前使用的方法,但我希望我的 Windows Phone 8.1 应用程序更通用,并与其平板电脑对应物共享更多代码。
    • 如果你想分享代码,你可以试试 PopupMenu 类。它也适用于 ContextMenu,但不可自定义。 compiledexperience.com/blog/posts/… - 这是示例(也应该适用于通用应用程序)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多