Los recursos lógicos le permiten definir objetos en XAML, que no son parte del árbol visual pero se pueden usar en su interfaz de usuario. Uno de los ejemplos de un recurso lógico es Brush, que se utiliza para proporcionar un esquema de color.En general, esos objetos se definen como recursos, que son utilizados por múltiples elementos de las aplicaciones.
<Window.Resources>
<RadialGradientBrush x:Key="myGradientBrush">
<GradientStop Color="Green" Offset="0"/>
<GradientStop Color="Blue" Offset="2"/>
</RadialGradientBrush>
</Window.Resources>
Ahora, por encima de los recursos declarados podría ser utilizado ya sea como recurso estático o dinámico. Un punto para recordar es que, al usar recursos estáticos, primero debe definirse en código XAML, antes de poder referirse. recursos estáticos y dinámicos se pueden utilizar como:
<Grid Background="{StaticResource myGradientBrush}"></Grid>
o:
<Grid Background="{DynamicResource myGradientBrush}"></Grid>
La diferencia entre StaticResource y DynamicResource radica en cómo los recursos son recuperados por los elementos de referencia. StaticResource se recupera solo una vez mediante el elemento de referencia y se usa durante toda la vida útil del recurso. Por otro lado, DynamicResource se adquiere cada vez que se utiliza el objeto al que se hace referencia.
Poniéndolo de manera más simple, si la propiedad de color de RadialGradientBrush cambia en el código a Naranja y Rosa, entonces se reflejará en los elementos solo cuando el recurso se use como DynamicResource. A continuación se muestra el código para cambiar el recurso de código:
RadialGradientBrush radialGradientBrush =
new RadialGradientBrush(Colors.Orange, Colors.Pink);
this.Resources["myGradientBrush"] = radialGradientBrush;
El demérito de DynamicResource es que reduce el rendimiento de aplicaciones ya que los recursos se recuperan cada vez que se utilizan. La mejor práctica es utilizar StaticResource hasta que haya una razón específica para usar DynamicResource.
Fuente:
WPF: StaticResource vs. DynamicResource
Es importante tener en cuenta que los desarrolladores de aplicaciones de Windows 8 no tienen DyanmicResource como opción, solo StaticResource. –
@Jerry Nixon Gracias a Dios por eso, he perdido la cuenta de la cantidad de veces que no pude hacer nada para trabajar porque estaba usando DynamicResource en lugar de StaticResource, o viceversa. Desde el punto de vista de los programadores, esta es una complejidad innecesaria. Una analogía son las definiciones de variables, ¿debo especificar explícitamente si vive en el montón o en la pila? Y si lo hago mal, ¿arroja un error de tiempo de ejecución catastrófico? – Contango
Para obtener una explicación más detallada de StaticResource y DynamicResource, y cuándo usar cada una, consulte https://msdn.microsoft.com/en-us/library/ms750613%28v=vs.100%29.aspx. –