将应用栏按钮的可见性绑定到控件

时间:2014-10-13 13:33:25

标签: c# xaml windows-phone-8.1 win-universal-app

我有一个非常简单的Windows Phone 8.1应用程序。这个应用程序有两个屏幕,为了简单起见,因为我有一些常见功能,我在MainPage.xaml内实现了这两个屏幕。我想将AppBar按钮的可见性绑定到这些屏幕/面板。这是我试过的东西

<Page.BottomAppBar>
    <CommandBar>
        <CommandBar.PrimaryCommands>
            <AppBarButton Icon="Add" IsCompact="False" Visibility="{Binding ElementName=ViewItemsPanel, Path=Visibility}" Label="Add" Click="AddButton_Click" />
            <AppBarButton Icon="Cancel" IsCompact="False" Visibility="{Binding ElementName=EditItemPanel, Path=Visibility}" Label="Cancel" Click="CancelButton_Click" />
            <AppBarButton Icon="Save" IsCompact="False" Visibility="{Binding ElementName=EditItemPanel, Path=Visibility}" Label="Save" Click="SaveButton_Click" />
        </CommandBar.PrimaryCommands>
        <CommandBar.SecondaryCommands>
        </CommandBar.SecondaryCommands>
    </CommandBar>
</Page.BottomAppBar>

不幸的是,这不起作用 - 两个屏幕上都可以看到所有三个按钮。我可以在代码隐藏中为每个创建一个动态属性,但我认为可能有一种很好的方式来做这样的事情 - 这可能吗?

3 个答案:

答案 0 :(得分:3)

AppBar与页面不在同一名称空间中,因此解析了页面元素的绑定。 AppBar与页面的任何绑定都是这种情况。

您可以将AppBar的DataContext设置为页面Loaded事件中的页面,然后绑定到页面上的属性。

答案 1 :(得分:0)

您可以创建一个网格面板来模仿应用栏,将网格命名为其中的应用栏按钮并根据需要折叠或显示。可能不是最优雅的方式,但它会完成工作。

答案 2 :(得分:0)

您可以在后面的代码中创建多个应用栏,并将您页面的ApplicationBar属性设置为您想要显示的应用栏。
我在3页的透视图中使用了这个解决方案

var applicationBars = new List<Microsoft.Phone.Shell.ApplicationBar>();
private void MainPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    switch (mainPivot.SelectedIndex)
    {
        case 0: ApplicationBar = applicationBars[0]; break;
        case 1: ApplicationBar = applicationBars[1]; break;
        case 2: ApplicationBar = applicationBars[2]; break;
        ...
    }
}