2011-01-16 9 views
6

Preguntando si eso es posible, p. si elimino el borde de un TextBox y quiero recuperar su borde predeterminado cuando el mouse está sobre él.¿Es posible usar un setter para devolver una propiedad a su valor predeterminado?

<Style TargetType="TextBox"> 
     <Setter Property="BorderBrush" Value="{x:Null}"/> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" Value="?????"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

pensé que podía usar ese pero al final me pareció una mala idea para ocultar el borde, pero la pregunta sigue siendo. (Sé que en este caso podría revertir el disparador para eliminar solo el borde si el mouse no está sobre el cuadro de texto)

+0

Define el valor predeterminado. ¿Quiere decir el valor predeterminado asignado a los metadatos 'DependencyProperty' subyacentes? –

+0

Supongo que sí, en términos descriptivos: lo que sea que se use si nunca fuera a establecer la propiedad. –

+0

"Sé que en este caso podría revertir el disparador para eliminar solo el borde si el mouse no está sobre el cuadro de texto" - ¿en qué casos no puede? –

Respuesta

5

Realmente no funciona así. El sistema DependencyProperty funciona al considerar numerosas fuentes de valores diferentes. Y como puede ver here, los iniciadores de estilo y los disparadores de estilo se consideran fuentes independientes. (Están numerados 8 y 6 respectivamente en la sección "Lista de precedencia de configuración de propiedad de dependencia"). Cualquiera de las fuentes de valor activo que tenga la prioridad más alta gana.

Las fuentes de propiedad de un tipo no pueden eliminar el valor proporcionado por una fuente diferente. La única razón por la que los desencadenantes pueden cambiar el valor a partir de lo que lo establece un colocador es que los desencadenadores tienen una prioridad más alta. No hay poder para erradicar un valor suministrado por una fuente de menor prioridad.

La manera de lograr el objetivo particular que ha expresado aquí sería invertir el sentido del disparador: no defina un ajustador de estilo y active el activador solo cuando IsMouseOver sea falso. Por supuesto, eso no te ayudará en todos los casos posibles en los que quieras hacer esto. Pero dado que no hay una solución general, creo que necesitarás resolver cada problema específico a su manera.

+0

Es bueno saber acerca de esas precedencias, gracias por su respuesta. –

Cuestiones relacionadas