У меня есть приложение с 3 PivotItem
и ApplicationBar
. Я хочу скрыть ApplicationBar
, когда выбраны PivotItem
s 2 и 3, и показать ApplicationBar
, когда выбран первый PivotItem
.
Как обработать событие выбранного элемента сводки в Windows Phone
Ответы (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. Надеюсь, поможет.
Сначала дайте имена для ваших сводных элементов, затем вам нужно создать класс 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). Надеюсь это поможет.