La diferencia entre estilos y plantillas en WPF
1. Estilo WPF
Similar a CSS en aplicaciones web, se puede definir un estilo unificado (Estilo) para los controles en WPF. El estilo es un tipo de recurso, como definir un color de fondo y una fuente unificados para el Botón:
lt; Window.Resourcesgt
lt; /p>
p>
lt;Setter Propiedad="Fondo" Valor="Amarillo" /gt;
lt;/Stylegt;
lt;/Ventana .Resourcesgt;
lt;StackPanelgt;
lt;Buttongt;Botón Alt;/Buttongt;
lt;/StackPanelgt;
Atributos definidos en Estilo y valor, que afectan el estilo de todos los controles de tipo Botón en Ventana
Este estilo es similar al selector de tipo en CSS, definiendo el estilo para un determinado tipo.
Además, puede agregar el atributo x:Key al Estilo como un estilo específico (tenga en cuenta que esto también requiere definir TargetType
Según el primer estilo, puede lograr esto); creando un nuevo estilo, de la siguiente manera: Window.Resourcesgt
Estilo x: Key="BigFontButtonStyle"
Setter Property="Control.FontFamily" Value="Times New Roman" / gt;
lt; Establecedor Propiedad="Control.FontSize" Valor="18" /gt;
lt; Establecedor Propiedad="Control.FontWeight" Valor="Bold" / gt;
lt; /Stylegt;
lt; Estilo x: Key="EmphasizedBigFontButtonStyle" BasedOn="{StaticResource BigFontButtonStyle}"gt;
lt; Setter Property="Control.Foreground" Value="White" /gt;
lt;Setter Property="Control.Background" Value="DarkBlue" /gt;
lt; /Stylegt;
lt;/Window.Resourcesgt;
Establecer estilos mediante programación Para asignar un estilo con nombre a un elemento, obtenga el estilo de la colección de recursos y asígnelo. la propiedad Estilo del elemento. Tenga en cuenta que los elementos de la colección de recursos son de tipo Objeto
, por lo que el estilo recuperado debe convertirse en un Estilo antes de asignarlo a la propiedad Estilo.
Por ejemplo, para establecer un estilo TitleText definido en un
TextBlock llamado textblock1:
textblock1.style=(style)Resources["TitleText"];
Tenga en cuenta que una vez que se aplica un estilo, queda sellado y no se puede cambiar. Si desea cambiar dinámicamente un estilo aplicado, debe crear un estilo nuevo para reemplazar el estilo existente.
Plantilla 2.wpf
Cuando la apariencia de un control no cumple con los requisitos, podemos usar el método "plantilla de control" para cambiar la apariencia de todos los controles en. WPF, siempre que haya una apariencia visual,
habrá una propiedad Plantilla
y el valor de esta propiedad se establecerá en un objeto ControlTemplate. El botón se parece al botón porque se ve directamente afectado por el objeto
ControlTemplate. El objeto ControlTemplate define la apariencia completa del control y puede reemplazar este objeto.
El tipo abstracto FrameworkTemplate solo define tres propiedades. La propiedad booleana
de solo lectura se utiliza para identificar si esta plantilla se puede modificar. Recursos
El tipo de propiedad es ResourceDictionary, definamos algunos recursos que solo se pueden usar dentro de la plantilla. La tercera propiedad es la más importante, llamada
visualTree, que define la disposición de los Elementos que componen la apariencia de este control.
El tipo ControlTemplate agrega dos definiciones de propiedad más: TargetType se usa para indicar qué tipo de control es adecuado para la aplicación a la plantilla. Triggers es una colección de objetos Trigger.
Todos los tipos derivados de ContentControl utilizan objetos de tipo ContentPresenter para mostrar su contenido. Pastel ContentPresenter
Derivado de FrameworkElement, puede incluir un objeto ContentPresenter en el árbol visual de la plantilla para contener el contenido que se colocará en la plantilla.
El elemento ContentPresenter
es responsable de mostrar el contenido de todos los controles "derivados de ContentControl". ContentPresenter divide el mundo en dos tipos de objetos:
Descendientes de UIElement y descendientes que no son UIElement. Para los descendientes que no son UIElement, ContentPresenter llamará al método
ToString del objeto y usará texto para. Muestre el objeto. Esta característica permite utilizar controles "derivados de ContentControl" para mostrar cualquier tipo de contenido.
lt;Window.Resourcesgt;
lt;Style TargetType="Button" x:Key="ButtonStyle"gt;
lt;!--Configuración El estilo predeterminado del botón: gt;
lt; Setter Property="FontFamily" Value="Comic Sans MS"/gt; >
lt;!--Establecer la plantilla del botón--gt;
lt;Setter Property="Template"gt;
lt;Setter.Valuegt;
lt;ControlTemplate TargetType="Button"gt;
lt;Gridgt;
lt;Ellipse Fill="{TemplateBinding Background}"/gt;
lt ContentPresenter
Margin="5"
HorizontalAlignment="Centro"
VerticalAlignment="Centro"/gt;
lt;/Gridgt;
lt;/ControlTemplategt;
lt;/Setter.Valuegt;
lt;/Settergt;
lt;/Stylegt;
lt;/Window.Resourcesgt;
lt;StackPanelgt;
lt;Button Margin="5" Style=" { StaticResource ButtonStyle}"
Ancho="100" Alto="100"
Contenido="Mi botón"gt;
lt;/Buttongt;
p>
lt;Button Margin="5" Ancho="200"gt;Botón comúnlt;/Buttongt;
lt;/StackPanelgt;.