Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将应用程序栏按钮的可见性绑定到控件_C#_Xaml_Windows Phone 8.1_Win Universal App - Fatal编程技术网

C# 将应用程序栏按钮的可见性绑定到控件

C# 将应用程序栏按钮的可见性绑定到控件,c#,xaml,windows-phone-8.1,win-universal-app,C#,Xaml,Windows Phone 8.1,Win Universal App,我有一个非常简单的Windows Phone 8.1应用程序。这个应用程序有两个屏幕,为了简单起见,并且因为我有一些常用功能,我在MainPage.xaml中实现了这两个屏幕。我想将AppBar按钮的可见性绑定到这些屏幕/面板。这是我试过的 <Page.BottomAppBar> <CommandBar> <CommandBar.PrimaryCommands> <AppBarButton Icon="Ad

我有一个非常简单的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>


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

您可以创建一个网格面板来模拟应用程序栏,命名网格,在其中放置应用程序栏按钮,然后根据需要折叠或使其可见。这可能不是最优雅的方式,但它会完成工作。

您可以在代码中创建几个应用程序栏,并将页面的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;
        ...
    }
}
var applicationbar=newlist();
private void MainPivot_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
开关(主枢轴。选择的索引)
{
案例0:ApplicationBar=applicationBars[0];中断;
案例1:ApplicationBar=applicationBars[1];中断;
案例2:ApplicationBar=applicationBars[2];中断;
...
}
}

AppBar与页面不在同一名称空间中,因此与页面元素的绑定将被解析。AppBar与页面的任何绑定都是如此


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

谢谢你,贾斯汀。比我的个人属性方法稍微优雅一些,如果我找不到纯xaml解决方案,我可能会这样做