Как программно установить выбранный элемент Panorama в WP7

Я использую панель управления панорамой в приложении WP7. Один из элементов PanoramaItems перенесет вас на другую страницу, которая затем позволяет отправлять электронную почту через EmailComposeTask. Если вы не решите отправить электронное письмо и нажмите кнопку «Назад», Panorama вернется к выбранному вами элементу. Однако, если вы действительно хотите отправить электронное письмо (и, следовательно, покинуть приложение), оно не вернется к ранее выбранному объекту PanoramaItem. Вместо этого он возвращается к первому элементу в Панораме. Я попытался отслеживать выбранный индекс и установить его, но я получил сообщение о том, что SelectedIndex не может быть установлен. Это подтверждено в документации MSDN http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.panorama.selectedindex%28VS.92%29.aspx

Есть ли способ вручную установить выбранный индекс / элемент в панораме? Если нет, есть ли способ запомнить, что было выбрано, даже если пользователь покидает приложение, чтобы составить письмо?

Я не уверен, что вы можете программно принудительно включить анимацию в другой объект PanoramaItem , но вы можете изменить Panorama.DefaultItem .

Таким образом, у вас может быть 3 OnNavigatedTo() PanoramaItem и обработчик OnNavigatedTo() , измените элемент по умолчанию:

 panoramaControl.DefaultItem = panoramaControl.Items[indexToSet]; 

Это должно помочь, когда вы оправитесь от надгробия.

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

Как программно установить видимый элемент в элементе управления Panorama?

Вы можете получить текущую активную страницу из свойства SelectedIndex панорамы.

К сожалению, установка DefualtItem является лишь приближением к решению этой проблемы, которую вы, возможно, уже обнаружили.

Изменить: Имейте в виду, что для параметра DefaultItem, какая страница панорамы является первой страницей. Это тонкая разница, но вы увидите, как важно смотреть на позиционирование заголовка и обертывание фонового изображения.

Вот решение. Он работает так, как ожидалось, и не изменяет панораму, поэтому ваш пользовательский интерфейс согласован.

 pan.SetValue(Panorama.SelectedItemProperty, panoramaItem); Panorama temp = pan; LayoutRoot.Children.Remove(pan); LayoutRoot.Children.Add(temp); LayoutRoot.UpdateLayout(); 

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

Я протестировал решения, перечисленные здесь, безуспешно. Вот что я сделал, это работает как шарм!

 PanoramaItem panItem = (PanoramaItem)panorama.Items[1]; panorama.Items.Remove(panItem); panorama.Items.Insert(0, panItem); 

Вам нужно удалить панель из списка и снова вставить ее в нужное положение!

Установите новый выбранный элемент на

 pan.SetValue(Panorama.SelectedItemProperty, pan.Items[newSelectedItem]); 

Тем не менее, он работает только на начальном этапе, поэтому моя идея позволяет перезапускам управление панорамой при изменении выбранного элемента. Это мой код, просто добавьте его после изменения Panorama.SelectedItem.

 (pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Collapsed; pan.SetValue(Panorama.SelectedItemProperty, pan.Items[(curIndex + 1) % pan.Items.Count]); pan.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); (pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Visible; 

Но сейчас нет эффекта перехода! Хотя, вы можете создать свое «я».

Это отлично работает для меня, эта страница также создает эффект для скользящего права http://xme.im/slide-or-change-panorama-selected-item-programatically

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

 private int hub_page_index; protected override void OnOrientationChanged(OrientationChangedEventArgs e) { base.OnOrientationChanged(e); if (panorama.Visibility == Visibility.Visible) { hub_page_index = panorama.SelectedIndex; } else if (pivot.Visibility == Visibility.Visible) { hub_page_index = pivot.SelectedIndex; } if (e.Orientation == PageOrientation.Landscape || e.Orientation == PageOrientation.LandscapeLeft || e.Orientation == PageOrientation.LandscapeRight) { // Display Pivot in Landscape orientation pivot.SetValue(Pivot.SelectedItemProperty, pivot.Items[panorama.SelectedIndex]); panorama.Visibility = Visibility.Collapsed; pivot.Visibility = Visibility.Visible; } else { // Display Panorama in Portrait orientation panorama.SetValue(Panorama.SelectedItemProperty, panorama.Items[pivot.SelectedIndex]); pivot.Visibility = Visibility.Collapsed; panorama.Visibility = Visibility.Visible; } } 
  • Как я могу сортировать ListBox, используя только XAML и без кода?
  • Навигация по страницам с помощью MVVM в приложении Store
  • DataContext UserControl
  • Передача значения enums в качестве параметра команды из XAML
  • Добавление элементов в столбцы в WPF ListView
  • Как передать значения (параметры) между страницами XAML?
  • Мои изображения размыты! Почему WPF SnapsToDevicePixels не работает?
  • Как связать перечисление с элементом управления combobox в WPF?
  • DataTrigger не изменяет свойство Text
  • Как сделать режим родственных источников найти предок (или эквивалент) в UWP
  • Как я могу создать границу и строку заголовка windows в WPF?
  • Interesting Posts

    Android – создайте уведомление, TaskStackBuilder.addParentStack не работает

    Hp probook white screen с ошибкой отменить изображение и загрузить в следующий порядок загрузки

    Исключить свойство из сериализации через пользовательский атрибут (json.net)

    Сравнение таймера с DispatcherTimer

    Использование std-пространства имен

    Лучший уровень предупреждения компилятора для компиляторов C / C ++?

    Использовать Notepad ++ для изменения under_score_case в CamelCase?

    Как удалить программное обеспечение, которое не отображается в программах и функциях, а также в программном обеспечении для удаления?

    Как использовать AOP с AspectJ для ведения журнала?

    Выбор столбцов в разных базах данных

    Случайно удалил папку «Загрузки», окно «Специальная папка», как восстановить?

    Почему я не могу переадресовать class объявления в пространстве имен, используя двойные двоеточия?

    Почему переменные Java ThreadLocal должны быть статическими

    Каков де-факто способ чтения и записи файлов в Rust 1.x?

    Entity Framework: Где я могу расширить CSDL / MSL?

    Давайте будем гением компьютера.