Можно ли отобразить панель приложения только для одного элемента Pivot? - PullRequest
7 голосов
/ 15 мая 2011

В приложении Windows Phone 7 я использую Pivot для пользовательского интерфейса. В качестве одного из элементов сводной страницы вставляется страница XAML, например:

<Pivot_Item>
<myviews:a_page.xaml/>
</Pivot_Item>

Панель приложения - стандартный шаблон - используется только на этой странице, так как весь Pivot в этом не нуждается. Но это не работает. На данный момент я мог только активировать панель для каждого элемента Pivot или использовать ее для отдельной страницы без Pivot.

Ответы [ 4 ]

13 голосов
/ 15 мая 2011

Насколько я знаю - ApplicationBar связан с вашим Page, но Pivot - это просто элемент управления вашим Page. Таким образом, ApplicationBar назначается для всего Page независимо от того, какая вкладка Pivot показана.

Вы можете сделать это, определив различные панели приложений в разделе ресурсов:

<phone:PhoneApplicationPage.Resources> 

    <shell:ApplicationBar x:Key="firstPivotTabApplicationBar" IsVisible="True"> 
        ...
    </shell:ApplicationBar> 

    <shell:ApplicationBar x:Key="secondPivotTabApplicationBar" IsVisible="True"> 
        ...
    </shell:ApplicationBar> 

</phone:PhoneApplicationPage.Resources>

И обработка SelectionChanged события в вашем сводном управлении:

private void MainPagePivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{
    string pivotResource;

    switch (_mainPagePivot.SelectedIndex)
    {
        case 0:
            pivotResource = "firstPivotTabApplicationBar";
            break;

        case 1:
            pivotResource = "secondPivotTabApplicationBar";
            break;

        default:
            throw new ArgumentOutOfRangeException();
    }

    ApplicationBar = (ApplicationBar)Resources[pivotResource]; 
} 
11 голосов
/ 15 мая 2011

Самый простой способ сделать это - просто обработать событие Pivot LoadingPivotItem .

Назначьте PivotItem имя:

<Pivot_Item Name="myPivotItem">
<myviews:a_page.xaml/>
</Pivot_Item>

В коде:

private void pivotMain_LoadingPivotItem(object sender, PivotItemEventArgs e)
{
     if (e.Item == myPivotItem) 
        ApplicationBar.IsVisible = true;
     else
        ApplicationBar.IsVisible = false;  
}
3 голосов
/ 30 января 2012

Попробуйте это ... добавьте следующую функцию в файл xaml.cs вашего PivotPage и убедитесь, что вы добавили событие SelectionChanged, чтобы использовать эту функцию ...

private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    switch (((Pivot)sender).SelectedIndex)
        {
            case 0:
                ApplicationBar.IsVisible = true;
                break;

            case 1:
                ApplicationBar.IsVisible = false;
                break;
    }
}

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

2 голосов
/ 15 мая 2011

Хотя загрузка ApplicationBar возможна только при отображении определенного PivotItem, это нестандартное поведение. Как правило, нехорошо удивлять пользователя нестандартным поведением.

То, что вы пытаетесь сделать это, говорит о том, что другая архитектура для вашего приложения может быть более подходящей. Если вы действительно должны сделать это таким образом, убедитесь, что вы понимаете: причины, по которым это обычно не делается; последствия этого; каковы альтернативы; и почему альтернативы не подходят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...