0

一段时间以来,我一直在尝试以自己的方式实现微软的汉堡包模式。

最终结果如下:

  • AppShell 用于包含当前页面和汉堡菜单(菜单始终可见)
  • 在 Appshell 中,Grid 有两行:一是 48px 高,一是一开始高度。
  • 在第一行,添加了一个命令栏(全局)和汉堡按钮(具有自定义样式的切换按钮,宽度和高度为 48 像素,汉堡字体图标位于中心)
  • 在第二行,SplitView 在窗格上有一个 ListBox,在内容中有一个 Frame。

这种方式可以控制内容,同时显示全局菜单和命令栏。在 Frame 的 Navigated 事件中,我更新 CommandBar 以从 Frame 的 Content 属性(我使用具有这些属性的自定义页面控件)和 CommandBar 的内容(现在是带绑定的单个 TextBlock)。

但是,我想将 ToggleButton 移到 CommandBar 中。它工作得很好,除了绑定(ToggleButton 的 IsChecked 绑定到 SplitView 的 IsPaneOpen)不起作用。我使用常规的 ElementName 定位,并且不希望使用 ViewModel 属性。

CommandBar.Content 是否使用不同的上下文?或者为什么 ElementName 参考不起作用?

4

3 回答 3

0

这对我有用:

<Page
    x:Class="StackOverflowTests.MainPage"
    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"
    mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="48"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <CommandBar>
            <CommandBar.Content>
                <AppBarToggleButton Icon="Globe" IsChecked="{Binding ElementName=SplitView,Path=IsPaneOpen,Mode=TwoWay}"/>
            </CommandBar.Content>
        </CommandBar>
        <SplitView Grid.Row="1" Name="SplitView" IsPaneOpen="{x:Bind Appbarbutton.IsChecked.Value,Mode=OneWay}">
            <SplitView.Pane>
                <ListBox>
                    <ListBoxItem>Foo</ListBoxItem>
                    <ListBoxItem>Bar</ListBoxItem>
                </ListBox>
            </SplitView.Pane>
            <SplitView.Content>
                <TextBlock>stuff here</TextBlock>
            </SplitView.Content>
        </SplitView>
    </Grid>
    <Page.BottomAppBar>
        <CommandBar>
            <CommandBar.Content>
                <AppBarToggleButton Name="Appbarbutton" Icon="Home" />
            </CommandBar.Content>
        </CommandBar>
    </Page.BottomAppBar>
</Page>
于 2015-12-26T18:17:36.257 回答
0

只有这样,我才能绑定到 AppBarToggleButton 是在后面的代码中设置 DataContext 。

XAML:

<Page.BottomAppBar>
  <CommandBar x:Name="CommandBar">
    <AppBarToggleButton x:Name="Button" IsChecked="{Binding IsPaneOpen, Mode=TwoWay}" Icon="Home" Label="Button"/>
  </CommandBar>
</Page.BottomAppBar>

后面的代码:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  base.OnNavigatedTo(e);
  Button.DataContext = SplitView;
}
于 2015-12-31T20:01:07.817 回答
0

您已绑定 DataContext: 示例:

<Page.BottomAppBar >
    <CommandBar x:Name="commandBar" DataContext="{Binding}">
        <CommandBar.Content>
            <StackPanel Margin="0,0">
                <ListView ItemsSource="{Binding Confirmation.AvailableValues}" ItemContainerStyle="{StaticResource ListViewItemBase}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Button Content="{Binding Value.DisplayName}" Command="{Binding DataContext.Confirm, ElementName=commandBar}" CommandParameter="{Binding Value}" HorizontalAlignment="Center"></Button>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <Line Margin="5" X1="0" X2="1000" Y1="0" Y2="0" HorizontalAlignment="Stretch" Height="2"  Stroke="#888888"   StrokeThickness="1" ></Line>
            </StackPanel>
        </CommandBar.Content>
    </CommandBar>

</Page.BottomAppBar>
于 2016-09-21T05:46:57.673 回答