En un estilo, establece las propiedades de un control.
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Red"/>
</Style>
<Button Style="{StaticResource MyButtonStyle}"/>
Todos los botones que utilizan este estilo tendrán sus fondos en rojo.
En una plantilla, define la UI (estructura) del control.
<ControlTemplate x:Key="MyButtonTemplate" TargetType="Button">
<Grid>
<Rectangle Fill="Green"/>
<ContentPresenter/>
</Grid>
</ControlTemplate>
<Button Template="{StaticResource MyButtonTemplate}"/>
Todos los botones que utilizan esta plantilla tendrán un fondo verde que no se puede cambiar.
Los valores establecidos en una plantilla solo pueden reemplazarse al reemplazar toda la plantilla. Los valores en un estilo se pueden reemplazar estableciendo el valor explícitamente cuando se usa el control. Es por eso que es mejor utilizar las propiedades del control mediante el uso de TemplateBinding en lugar de valores de codificación.
<ControlTemplate x:Key="MyButtonTemplate" TargetType="Button">
<Grid>
<Rectangle Fill="{TemplateBinding Background}"/>
<ContentPresenter/>
</Grid>
</ControlTemplate>
Ahora la plantilla utiliza el valor de la propiedad de fondo del botón que se aplica, por lo que se puede personalizar:
<Button Template="{StaticResource MyButtonTemplate}" Background="Yellow"/>
Otra característica útil es que los controles pueden recoger un estilo por defecto sin tener un estilo específico asignado a ellos. No puedes hacer eso con una plantilla.
Simplemente elimine el atributo x: Key del estilo (nuevamente: no puede hacer esto con las plantillas). Todos los botones en el árbol visual debajo del estilo tendrán este estilo aplicado.
Combinando plantillas y estilos es de gran alcance adicional: se puede establecer la propiedad Template del universo:
<Style TargetType="Button">
<Setter Property="Background" Value="Red"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Rectangle Fill="{TemplateBinding Background"/>
<ContentPresenter/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Relacionados: [ItemTemplate vs ControlTemplate] (http://stackoverflow.com/questions/575389/itemtemplate-vs-controltemplate) – Helen
Recurso de MSDN, La diferencia entre estilos y plantillas: http://msdn.microsoft.com/ es-us/library/cc295273% 28v = expression.40% 29.aspx –