2016-02-06 3 views
2

Я хочу скрыть кнопку меню гамбургера автоматически, чтобы отобразить меню сверху вниз. Для этого я попытался связать HamburgerButtonVisibility к IsPaneOpen собственности:UWP Template10 Скрыть кнопку гамбургера, когда меню открыто

<controls:HamburgerMenu x:Name="Menu" VisualStateNarrowMinWidth="0" HamburgerBackground="White" HamburgerForeground="Black" 
           NavAreaBackground="{StaticResource MenuBackground}" 
           HamburgerButtonVisibility="{x:Bind Menu.IsOpen, Mode=OneWay, Converter={StaticResource ReverseBooleanToVisibilityConverter}}" /> 

Но с этим решением есть одна проблема: когда я открываю меню и нажмите вне меню, меню закрывается, но кнопка гамбургер исчезает.

Есть ли другие решения для этого?

Также я не узнал, как установить NavigationService в HamburgerMenu, если меню принадлежит для страницы (а не оболочки). Я попытался установить его с помощью страницы ViewModel, но я получаю NRE в этом случае:

<Page 
    x:Class="App.LoginPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:vm="using:App.ViewModels" 
    mc:Ignorable="d"> 

    <Page.DataContext> 
     <vm:LoginViewModel /> 
    </Page.DataContext> 

    <controls:HamburgerMenu x:Name="Menu" /> 
</Page> 

sealed partial class LoginPage : Page 
{ 
    public LoginPage() 
    { 
     this.InitializeComponent(); 
     Menu.NavigationService = ViewModel.NavigationService; //NRE here 
    } 

    public LoginViewModel ViewModel => DataContext as LoginViewModel; 
} 

Stack след:

at Template10.Controls.HamburgerMenu.set_NavigationService(INavigationService value) 
    at App.LoginPage..ctor() 
    at App.App_XamlTypeInfo.XamlTypeInfoProvider.Activate_46_LoginPage() 
    at App.App_XamlTypeInfo.XamlUserType.ActivateInstance() 
+0

Мне не нравится внешний вид этого подхода, но спасибо за просьбу, чтобы я мог решить эту ошибку в шаблоне 10 HamMenu. –

+0

@ JerryNixon-MSFT _I не нравится этот подход_ - Вы имеете в виду HamburgerButtonVisibility, привязанный к свойству IsOpen? Как бы вы реализовали такой тип меню? Буду признателен, если вы предложите лучшее решение. –

+0

Реализация в порядке. Я не поклонник спрятать кнопку Хэм. –

ответ

1

Итак, посмотрите. Вы обнаружили ошибку в Шаблоне 10. Я исправил эту ошибку, и я подниму ее до NuGet позже на этой неделе. Если вы не используете NuGet, а код из GitHub, вы обнаружите, что код работает отлично, когда вы получаете последние. В противном случае вам нужно будет подождать несколько дней.

Вот как вы это делаете, я включил ValueWhenConverter, потому что похоже, что вы можете не знать об этом. Если вы не хотите его использовать, вам это не нужно.

<Page xmlns:converters="using:Template10.Converters"> 

<Page.Resources> 
    <converters:ValueWhenConverter x:Key="VisBoolConverter"> 
     <converters:ValueWhenConverter.When> 
      <x:Boolean>True</x:Boolean> 
     </converters:ValueWhenConverter.When> 
     <converters:ValueWhenConverter.Value> 
      <Visibility>Collapsed</Visibility> 
     </converters:ValueWhenConverter.Value> 
     <converters:ValueWhenConverter.Otherwise> 
      <Visibility>Visible</Visibility> 
     </converters:ValueWhenConverter.Otherwise> 
    </converters:ValueWhenConverter> 
</Page.Resources> 

<Controls:HamburgerMenu x:Name="MyHamburgerMenu" 
    HamburgerButtonVisibility="{Binding IsOpen, 
    RelativeSource={RelativeSource Mode=Self}, 
    Converter={StaticResource VisBoolConverter}}"> 
</Controls:HamburgerMenu> 

Похоже на это.

enter image description here

удачи!