2014-09-22 168 views
1

我有一個包含一個命令欄這個命令欄的頁面AppBar我有AppBar按鈕,點擊打開一個MenuFlyout像下面的時候:Windows Phone 8.1 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不夠大,無法顯示所有結果。

上述代碼可以在項目中多次添加,並導致相同的錯誤。

有沒有人有解決方案?

回答

0

編輯:它似乎是一個已知的錯誤。有關解決方法,請參閱this answer


我不認爲MenuFlyout是專爲與AppBarButton使用。它更適合作爲ListViewItem的長按菜單。無論如何,我從來沒有在任何官方的微軟應用程序中看到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" 
     }; 
    } 
} 

,以產生這樣的彈出按鈕(其是可滾動):

enter image description here

當然,這是一個非常簡單的例子,您可以設置ItemsSource通過其他方式。

+0

微軟將它添加上下文菜單到那裏的應用程序按鈕。 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj150602.aspx。一個Windows商店應用程序的行爲正確的Windows Phone 8.1應用程序沒有。這對我來說似乎是一個錯誤。 – Xela 2014-09-22 20:45:14

+0

您目前的方法是我之前使用的方法,但我希望使我的Windows Phone 8.1應用程序更通用,並與平板電腦相對應地共享更多代碼。 – Xela 2014-09-22 20:49:09

+0

如果你想分享代碼,你可以嘗試PopupMenu類。它也適合ContextMenu,但它不是可定製的。 http://compiledexperience.com/blog/posts/positioning-popup-menus-in-windows-8-metro/ - 這是示例(也適用於通用應用程序)。 – 2014-09-23 16:17:46