Estoy tratando de aprender WPF, pero me resulta muy difícil entender las vinculaciones, lo de "recursos" y la creación de objetos. Mi fondo está en C++/MFC y C# -Winforms.Principiante: confundido sobre el enlace y los recursos en WPF
Mis preguntas:
mayoría de los ejemplos que veo en XAML (en MSDN y en otros dos libros que he leído WPF) utilizan StaticResource en la expresión de enlace. ¿Están relacionados de alguna manera con los miembros estáticos? ¿O es solo un nombre engañoso? Cuando se hace referencia a cualquier objeto como StaticResource, ¿cuándo se instancia?
Por lo que yo puedo ver StaticResources se utilizan con "cosas" definidos en la sección "Recursos" de la aplicación/ventana/control, etc.
Ahora, estas secciones de recursos son muy confuso para mí. ¿Qué son exactamente? Desde mi experiencia en MFC estos fueron iconos, cadenas, etc. Sin embargo, a juzgar por todos los ejemplos que he visto, en WPF estos parecen ser esencialmente un "vertedero" para (a) todo tipo de definiciones de objetos globales en marcado (estilos, plantillas de datos, etc.) (b) todo tipo de instanciaciones de objetos globales en el marcado ¿Estoy en lo correcto? Esto me parece muy complicado.
Básicamente, se trata de aprender todo tipo de semi-DSL en XAML (para definir estilos, definir plantillas de datos, crear objetos, etc.) y pegarlas en el mismo lugar. Sigo pensando en algo como editar manualmente el archivo de recursos (.rc) en MFC. Al menos allí las secciones estaban bien separadas y la sintaxis de cada recurso era relativamente simple.Para atar las dos preguntas anteriores: Cuando defino una instancia de objeto en la sección Recursos, y luego la hago referencia desde un enlace StaticResource, ¿cuándo exactamente se instancia? MSDN dice (en "Cómo: Hacer disponible de datos para Encuadernación en XAML"):
una forma que puede hacer que el objeto disponible para la unión es definirla como un recurso
Sin embargo, esto no es muy claro. ¿Qué significan disponibles? ¿Significan creado? ¿Significan que están conectados al subsistema de enlace? Y cuando exactamente es ese objeto creado? Al jugar con un ejemplo simple, vi que WPF parece crear este objeto para mí cuando intenta adjuntar el enlace. Y esto es aún más confuso.
EDIT: Después de la aclaración por karmicpuppet a continuación, todavía estoy confundido en cuanto a cómo está conectado a la vinculación. Supongamos que tengo en mis recursos:
<local:Person x:Key="MyPerson" Name="Title"/>
(donde la persona es una clase con una propiedad llamada Nombre) y luego en la ventana que tengo:
<TextBlock Text="{Binding Source={StaticResource MyPerson}, Path=Name}"/>
1) ¿Qué hace esto? ¿Sigue los mismos pasos, buscando el recurso y luego aplicándolo a la propiedad Text? ¿El objeto MyPerson se crea en el momento de la creación de la ventana, o más tarde? 2) ¿Tengo que usar el mecanismo de enlace para enlazar a la propiedad Nombre? ¿No puedo enlazarlo directamente como lo hizo anteriormente con myBrush? ¿Por qué no puedo hacer algo como esto?
<TextBlock Text="{StaticResource MyPerson, Path=Name}"/>
¿Es solo una miopía por parte del marco? Creo que me estoy perdiendo mucho de aquí, pero parece que no entiendo qué ...
3) Intenté usar DynamicResource, pero estoy muy confundido sobre cada paso que tomé. a) Se ha añadido una DependencyObject con un DependencyProperty por encima de mi clase de ventana única en el código (es necesario DependencyObject?)
public class SomeText : DependencyObject
{
public string Header
{
get { return (string)GetValue(HeaderProperty); }
set { SetValue(HeaderProperty, value); }
}
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(string), typeof(SomeText), new UIPropertyMetadata(0));
}
b) que se añade una instancia del mismo a los Windows.Resources (es esto necesario con DynamicResource? MSDN parece decir que no, pero si lo que no puedo encontrar la manera de hacer el siguiente paso en XAML)
c) he intentado tanto:
Text="{Binding Source={DynamicResource HeaderText}, Path=Header}"
Lo que me dio una excepción, y
Text="{DynamicResource HeaderText}"
Pero yo no podía entender dónde poner la ruta de la propiedad de la cabecera.
Este es mi 5 o más intento de juguetear con WPF últimamente, y cada vez me deja perplejo por estas cosas aparentemente simples que no funcionan. He leído 2 libros y realmente trato de entender los artículos de MSDN, sin embargo, no son de ninguna ayuda en absoluto.
Espere a que necesite una animación sobre la marcha. – Blindy