Cómo configurar programáticamente el elemento Panotwig seleccionado en WP7

Estoy usando un control de outlook en una aplicación WP7. Uno de los PanotwigItems lo lleva a otra página, que luego le permite enviar un correo electrónico a través de EmailComposeTask. Si no selecciona enviar el correo electrónico y presiona el botón Atrás, el Panotwig vuelve al elemento que seleccionó por última vez. Sin embargo, si selecciona enviar un correo electrónico (y, por lo tanto, deja la aplicación), no regresa al PanotwigItem previamente seleccionado. En su lugar, vuelve al primer elemento en el Panotwig. Intenté hacer un seguimiento del índice seleccionado y configurarlo, pero recibí un error que dice que SelectedIndex no se puede configurar. Esto se confirma en la documentación de MSDN http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.outlook.selectedindex%28VS.92%29.aspx

¿Hay alguna manera de establecer manualmente el índice / elemento seleccionado en un outlook? Si no es así, ¿hay alguna forma de que recuerde lo que se seleccionó, incluso si el usuario deja la aplicación para redactar un correo electrónico?

No estoy seguro de si puede forzar mediante progtwigción una animación a otro PanotwigItem , pero puede cambiar el Panotwig.DefaultItem .

Por lo tanto, es posible que tenga 3 PanotwigItem ‘s y en el controlador OnNavigatedTo() , cambie el elemento predeterminado a través de:

 outlookControl.DefaultItem = outlookControl.Items[indexToSet]; 

Esto debería ayudar cuando te recuperas de una lápida.

Puedes probar la solución publicada por Silicon Shark en este hilo. Se considera que funciona, pero solo en la pantalla inicial, lo que no debería ser un problema para sus requisitos de restauración del estado después de desechar.

¿Cómo configurar programáticamente el elemento visible en un control Panotwig?

Puede obtener la página actualmente activa de la propiedad SelectedIndex del outlook.

Desafortunadamente, configurar DefualtItem es solo una aproximación para resolver este problema, que tal vez ya hayas descubierto.

Editar: tenga en cuenta que al configurar DefaultItem, cambia qué página del outlook es la primera página. Es una diferencia sutil, pero verá lo importante que es mirar la posición del encabezado y la envoltura de la imagen de fondo.

Aquí hay una solución. Funciona como se espera y no reorganiza su outlook, por lo que su interfaz de usuario es consistente.

 pan.SetValue(Panotwig.SelectedItemProperty, outlookItem); Panotwig temp = pan; LayoutRoot.Children.Remove(pan); LayoutRoot.Children.Add(temp); LayoutRoot.UpdateLayout(); 

Esta no es una solución perfecta porque no se desliza muy bien como debería hacerlo el outlook, y ​​probablemente no sea muy eficiente, pero, por otro lado, no está cambiando el elemento predeterminado, por lo que su interfaz de usuario se mantiene constante.

He probado las soluciones enumeradas aquí sin éxito. ¡Aquí está lo que hice que funciona a la perfección!

 PanotwigItem panItem = (PanotwigItem)outlook.Items[1]; outlook.Items.Remove(panItem); outlook.Items.Insert(0, panItem); 

¡Debe eliminar el panel de la lista y volver a insertarlo en la posición deseada!

Establecer nuevo elemento seleccionado por

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

Sin embargo, funciona solo en la inicial, por lo que mi idea es dejar que el control de outlook se reinicie cuando cambiemos el elemento seleccionado. Este es mi código, solo agréguelo después de cambiar Panotwig.SelectedItem.

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

¡Pero no hay efecto de transición ahora! Aunque, puedes crear tu yo.

Funciona muy bien para mí, esta página también crea un efecto para deslizar hacia la derecha http://xme.im/slide-or-change-outlook-selected-item-progtwigtically

Estoy usando este modelo para cambiar a un pivote cuando el dispositivo pasa a la vista horizontal, probablemente terminaré extrayendo el elemento actual al estado de la aplicación. El outlook es un no-go en orientación horizontal.

 private int hub_page_index; protected override void OnOrientationChanged(OrientationChangedEventArgs e) { base.OnOrientationChanged(e); if (outlook.Visibility == Visibility.Visible) { hub_page_index = outlook.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[outlook.SelectedIndex]); outlook.Visibility = Visibility.Collapsed; pivot.Visibility = Visibility.Visible; } else { // Display Panotwig in Portrait orientation outlook.SetValue(Panotwig.SelectedItemProperty, outlook.Items[pivot.SelectedIndex]); pivot.Visibility = Visibility.Collapsed; outlook.Visibility = Visibility.Visible; } }