Как обработать событие выбранного элемента сводки в Windows Phone

У меня есть приложение с 3 PivotItem и ApplicationBar. Я хочу скрыть ApplicationBar, когда выбраны PivotItems 2 и 3, и показать ApplicationBar, когда выбран первый PivotItem.


person user3847141    schedule 24.07.2014    source источник


Ответы (2)


Я не знаю, почему за этот вопрос проголосовали против. Смысл вопроса может быть неверным и его можно отредактировать. У меня есть решение для вас @user3847141. Ну вот.

PivotItem pivot = null;
    private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ApplicationBar appBar = new ApplicationBar();
        ApplicationBarIconButton appBarIconButton = new ApplicationBarIconButton();
        pivot = (PivotItem)(sender as Pivot).SelectedItem;
        switch(pivot.Header.ToString())
        {
            case "item1": 
                appBar.Mode = ApplicationBarMode.Default;
                appBarIconButton.IconUri = new Uri("/appbar.close.png", UriKind.RelativeOrAbsolute);
                appBarIconButton.Text = "Close";
                appBar.Buttons.Add(appBarIconButton);
                this.ApplicationBar = appBar;
                break;
            case "item2":
                appBar.Mode = ApplicationBarMode.Minimized; // To minimize AppBar
                appBar = null; // Delete Application Bar                     
                this.ApplicationBar = appBar;
                break;
            case "item3":
                appBar.Mode = ApplicationBarMode.Minimized;
                appBar = null;                   
                this.ApplicationBar = appBar;
                break;
        }
    }

Вы можете добиться этого с помощью события Selection_Changed в Pivot. Надеюсь, поможет.

person Balasubramani M    schedule 24.07.2014

Сначала дайте имена для ваших сводных элементов, затем вам нужно создать класс PivotCallbacks.

class PivotCallbacks
{
     public Action Initiate { get; set; }
     public Action OnAvtivated { get; set; }
     public Action<CancelEventArgs> OnBackKeyPress { get; set; }
}

Затем в конструкторе страницы добавьте следующее.

public MainPage()
{
    InitializeComponent();

    _callbacks = new Dictionary<object, PivotCallbacks>();
    _callbacks[pivotItem1] = new PivotCallbacks
    {
        Initiate = ShowAppbar,
        OnAvtivated = ShowAppbar

    };
    _callbacks[pivotItem2] = new PivotCallbacks
    {
        OnAvtivated = HideAppbar
    };
    _callbacks[pivotItem3] = new PivotCallbacks
    {
        OnAvtivated = HideAppbar
    };

    foreach (var callbacks in _callbacks.Values)
    {
        if (callbacks.Initiate != null)
        {
            callbacks.Initiate();
        }
    }
}

(здесь ShowAppbar и HideAppbar — это методы, которые имеют логику для отображения/скрытия панели приложения)

Затем, когда когда-либо выбор изменяется в текущем элементе сводки, вам нужно вызвать соответствующую функцию, прикрепленную к нему. для этого в событии Selection изменено сводного элемента добавьте следующий код.

private void pivotItemMomento_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

    PivotCallbacks callbacks;
    if (_callbacks.TryGetValue(momentoPivot.SelectedItem, out callbacks) && (callbacks.OnAvtivated != null))
    {
           callbacks.OnAvtivated();
    }
}

Поэтому, когда onActivated вызывается, методы, связанные с этим действием, вызываются в соответствующем элементе сводки. Вы можете сделать то же самое и с другими действиями (например, OnBackKeyPress). Надеюсь это поможет.

person Kasun Kodagoda    schedule 24.07.2014