2012-08-01 9 views
9

He encontrado numerosos subprocesos similares aquí, pero ninguno que parecen abordar mi problema específico.Enlace de un disparador de estilo WPF a una propiedad de dependencia personalizada

Necesito resaltar el fondo de un cuadro de texto bajo ciertas condiciones. Creé una propiedad de resaltado e intenté usar un desencadenador en un estilo para establecerlo, pero en realidad nunca resalta el texto.

Aquí es mi estilo, simplificado:

<Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}"> 
    <Style.Triggers> 
     <Trigger Property="Elements:DataElement.Highlight" Value="True"> 
      <Setter Property="Control.Background" 
        Value="{DynamicResource EntryBoxHighlightBackground}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

elementos se define como:

xmlns:Elements="clr-namespace:MDTCommon.Controls.Forms.Elements"> 

entonces tengo la sección donde se aplica el estilo:

<!-- Applies above style to all TextBoxes --> 
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxContentHolder}" > 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" /> 
    <!-- Overrides the default Error Style --> 
</Style> 

En el El código detrás de la clase DataElement es el siguiente:

public static readonly DependencyProperty HighlightProperty = 
    DependencyProperty.Register("Highlight", typeof(bool), typeof(DataElement)); 

public bool Highlight 
{ 
    get { return (bool)base.GetValue(HighlightProperty); } 
    set { base.SetValue(HighlightProperty, value); } 
} 

Un DataElement derivado en última instancia de UserControl y contiene una referencia al objeto TextBox así como a otros objetos.

En la clase CustomForm que aloja todos los objetos DataElement, tengo lo siguiente para establecer el color.

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow; 

Por lo tanto, la primera cuestión es que al establecer la propiedad Resalte para el DataElement no hace que el fondo de texto para dibujar en amarillo.

El otro problema es que me doy cuenta de que estoy aplicando este estilo a todos los cuadros de texto y podría tener cuadros de texto en otras áreas que no están realmente contenidas en un DataElement, lo que puede causar un problema vinculante.

+0

intenta agregar un setter 'fondo' a su estilo –

+0

tengo una setter para ello. – WPFNewbie

+0

Dejé mucho estilo para mantenerlo simple y centrarme en las áreas donde creo que podría estar el problema. – WPFNewbie

Respuesta

5

pruebas a convertir su disparo en un DataTrigger, y agregar un enlace que va a mirar directamente al control de DataElement, así:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True"> 
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/> 
</DataTrigger> 
+3

¿Por qué? El '' 'Trigger''' simple debería soportar propiedades de dependencia, ¿no es así? – boli

Cuestiones relacionadas