ControlTemplate personalizado predeterminado no se aplica cuando se utiliza Estilo

StackOverflow https://stackoverflow.com/questions/2402160

  •  18-09-2019
  •  | 
  •  

Pregunta

He creado un estilo por defecto para un botón que incluye un ControlTemplate encargo de este modo:

<Style TargetType="{x:Type Button}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <!-- ...other property setters... -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="gridMain">
                    <!-- some content here -->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Este estilo se añade a mi ResourceDictionary compartida que se carga por cada control. Ahora bien, este estilo / plantilla se aplica a todos los botones de mi, como se esperaba, pero no se aplica a esos botones que utilizan localmente un estilo diferente. Por ejemplo, yo quiero tener un cierto margen para mi "OK", "Aceptar" y "Cancelar" botones. Por lo tanto, he definido el siguiente estilo:

<Style x:Key="OKApplyCancelStyle" TargetType="{x:Type Button}">
    <Setter Property="Margin" Value="4,8"/>
    <Setter Property="Padding" Value="8,6"/>
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="FontSize" Value="16"/>
</Style>

... y se aplica ese estilo a los botones de mi usando un StaticResource:

<Button Content="OK" Style="{StaticResource OKApplyCancelStyle}"/>

Para mí, el resultado esperado sería que el ControlTemplate anterior todavía se aplica, utilizando los valores de margen, Relleno, MinWidth y Tamaño de Letra de la "OKApplyCancelStyle". Pero este no es el caso. El valor por defecto de Windows ControlTemplate se utiliza en su lugar, utilizando los valores del estilo.

Es este el comportamiento típico? ¿Tiene un estilo local anula realmente una costumbre ControlTemplate? Si es así, ¿cómo puedo lograr mi comportamiento deseado? Es decir. seguir utilizando el ControlTemplate costumbre, incluso cuando estilos se definen localmente?

Muchas gracias de antemano, gehho.

¿Fue útil?

Solución

completamente de la memoria aquí, pero algo así como (o muy parecido)

<Style x:Key="OKApplyCancelStyle" BasedOn="{StaticResource {x:Type Button}}">
<!--Style here-->
</Style>

podría funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top