Привязка видимости кнопок панели приложения к элементам управления

1

У меня очень простое приложение для 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>

К сожалению, это не работает - все три кнопки видны на обоих экранах. Я мог бы создать динамическое свойство в коде для каждого из них, но я думал, что может быть хороший элегантный способ сделать что-то вроде этого - возможно ли это?

Теги:
xaml
win-universal-app
windows-phone-8.1

3 ответа

3
Лучший ответ

AppBar не находится в том же пространстве имен, что и страница, и поэтому привязки к элементам страницы разрешаются. Это относится к любой привязке AppBar к странице.

Вы можете установить AppCar DataContext на страницу на странице Загруженное событие, а затем привязать к свойствам на странице.

  • 0
    Спасибо, Роб, это сработало для меня.
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;
        ...
    }
}
0

вы можете создать панель сетки, чтобы имитировать панель приложений, назовите сетку опустить в нее кнопки панели приложения и свернуть или сделать видимыми по мере необходимости. Возможно, это не самый элегантный способ сделать это, но он выполнит свою работу.

  • 0
    Спасибо, Джастин. немного более элегантный, чем мой индивидуальный подход к свойствам, если я не могу найти чистое решение xaml, я могу сделать это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню