将应用程序栏按钮的可见性绑定到控件
本文关键字:绑定 控件 可见性 应用程序 按钮 | 更新日期: 2023-09-27 18:26:23
我有一个非常简单的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>
不幸的是,这不起作用——这三个按钮在两个屏幕上都可见。我可以在代码背后为每一个创建一个动态属性,但我认为可能有一种很好的优雅方式来做这样的事情——这可能吗?
AppBar与页面不在同一命名空间中,因此与页面元素的绑定会解析。AppBar与页面的任何绑定都是这种情况。
您可以在页面Loaded事件中将AppBar的DataContext设置为页面,然后绑定到页面上的属性。
您可以创建一个网格面板来模拟应用程序栏,命名网格并在其中放置应用程序栏按钮,然后根据需要折叠或使其可见。这可能不是最优雅的方式,但它会完成任务。
您可以在代码背后创建多个应用程序栏,并将页面的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;
...
}
}