У меня очень простое приложение для 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 к странице.
Вы можете установить AppCar 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;
...
}
}
вы можете создать панель сетки, чтобы имитировать панель приложений, назовите сетку опустить в нее кнопки панели приложения и свернуть или сделать видимыми по мере необходимости. Возможно, это не самый элегантный способ сделать это, но он выполнит свою работу.