2

ページの上から下までメニューを表示するために、ハンバーガーメニューボタンを自動的に非表示にしたい。この目的のために、HamburgerButtonVisibility を IsPaneOpen プロパティにバインドしようとしました。

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

しかし、このソリューションには 1 つの問題があります。メニューを開いてメニューの外側をタップすると、メニューは閉じられますが、ハンバーガー ボタンが消えます。

これに対する他の解決策はありますか?

また、メニューがページ (シェルではない) に属している場合、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;
}

スタックトレース:

   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()
4

1 に答える 1

2

だから、見てください。Template 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>

このように見えます。

ここに画像の説明を入力

頑張ってください!

于 2016-02-07T00:38:24.323 に答える