silverlight - una - navegacion entre ventanas wpf
¿Cómo puedo animar una propiedad dinámicamente en un Silverlight 4 UserControl? (1)
Bueno, me las arreglé para resolverlo, así que estoy compartiendo la solución.
En lugar de tratar de obtener una referencia a DoubleAnimation en los recursos, denominé la cuadrícula en el diseño que quiero animar y obtengo una referencia a la que utiliza el código en la pregunta original:
var SlidePanel = ((Grid)(LayoutRootreference.FindName("SlidePanel")));
Esto devuelve el elemento y usando eso es posible crear un DoubleAnimation y un Storyboard desde cero puramente en código. Acabo de utilizar este ejemplo de código como punto de partida: http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx#procedural_code
La mejor parte es que puedes cambiar el parámetro DoubleAnimation.To incluso después de configurar todo en el Storyboard, así que ahora lo que estoy haciendo es reiniciarlo a mi valor calculado cada vez antes de llamar a Storyboard.Begin ().
Es un poco complicado configurar todo esto de forma manual, pero al menos funciona bien una vez que lo haces.
Me encontré con una limitación desconcertante en un Silverlight 4 UserControl.
Lo que intento lograr es tener un panel, que se deslice desde un estado minimizado cuando se presiona un botón, pero la barra de título debe ser arrastrable para cambiar el tamaño de este estado maximizado.
Lo que he hecho para el deslizamiento es animar la propiedad MaxHeight de la cuadrícula principal de este panel, que funciona bastante bien incluso sin la altura codificada del panel, pero no sé cómo puedo hacer que esto sea dinámico.
Intentar vincular una variable desde el código subyacente al parámetro ''Hasta'' de ''DoubleAnimation'' no funcionó, simplemente se ignora silenciosamente.
Como estoy creando UserControls para representar Vistas, los elementos con propiedades x: Name no se generarán automáticamente.
Traté de evitar esto usando el siguiente código que imita lo que sucede en el código autogenerado (con la ventaja añadida de que solo se realiza después de que el diseño esté realmente cargado):
public DoubleAnimation PanelOpenMaxHeightDoubleAnimation;
private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
var LayoutRootreference = sender as Grid;
PanelOpenMaxHeightDoubleAnimation = ((DoubleAnimation)(LayoutRootreference.FindName("PanelOpenMaxHeightDoubleAnimation")));
PanelOpenMaxHeightDoubleAnimation.To = 383;
}
Sin embargo, esto se rompe al intentar establecer el valor de A, ya que FindName devuelve nulo (Tengo x: Nombre configurado manualmente en XAML para esta animación en particular en "PanelOpenMaxHeightDoubleAnimation"). Tengo la sospecha furtiva de FindName no puede recoger DoubleAnimations desde VisualStates, solo niños de diseño real?
Encontré la documentación sobre XAML Namescopes en http://msdn.microsoft.com/en-us/library/cc189026(v=VS.95).aspx#UserControls , pero realmente no entendí cuáles son mis opciones de este párrafo (que no sea muy limitado):
Para el caso de un UserControl, no existe una convención de atributo de parte de plantilla equivalente para partes del UserControl en la definición XAML, ni existe una plantilla aplicada en absoluto. Sin embargo, los nombres y los nombres entre la definición y el uso permanecen desconectados, ya que el namescope de definición se define y luego se sella de manera efectiva cuando empaqueta su UserControl en un ensamblaje para su reutilización. Una mejor práctica aquí es definir su UserControl de modo que cualquier valor que necesite establecerse para modificar la definición XAML también esté expuesto como propiedad pública del UserControl.
¿Qué significa la última oración?
¿Te preguntas qué puedo hacer ahora? ¿Debo tratar de generar todo el estado del código?