2012-08-01 10 views
9

Ho trovato numerosi thread simili qui, ma nessuno che sembra risolvere il mio problema specifico.Associazione di un trigger di stile WPF a una proprietà di dipendenza personalizzata

Devo evidenziare lo sfondo di una casella di testo in determinate condizioni. Ho creato una proprietà di evidenziazione e ho provato a utilizzare un trigger in uno stile per impostarlo, ma in realtà non evidenzia mai il testo.

Qui è il mio stile, semplificato:

<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> 

elementi è definito come:

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

allora ho la sezione in cui viene applicato lo stile:

<!-- 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> 

Nel codice dietro della classe DataElement è la seguente:

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 deriva in ultima analisi da UserControl e contiene un riferimento all'oggetto TextBox nonché a tutti gli oggetti.

Nella classe CustomForm che contiene tutti gli oggetti DataElement ho il seguente per impostare il colore.

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow; 

Così, il primo problema è che l'impostazione della proprietà Highlight per il DataElement non causa lo sfondo casella di testo per disegnare in giallo.

L'altro problema è che mi rendo conto che sto applicando questo stile a tutte le caselle di testo e che potrei avere caselle di testo in altre aree che non sono effettivamente contenute in un DataElement, il che potrebbe causare un problema di binding.

+0

tenta di aggiungere un setter 'background' al vostro stile –

+0

ho un setter per questo. – WPFNewbie

+0

Ho tralasciato molto stile per mantenerlo semplice e concentrarmi sulle aree in cui penso che il problema potrebbe essere. – WPFNewbie

risposta

5

Prova convertire il grilletto per un DataTrigger, e aggiungere un legame che sarà guardare direttamente il controllo DataElement, in questo modo:

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

Perché? Il semplice '' 'Trigger''' dovrebbe supportare le proprietà di dipendenza, non dovrebbe? – boli

Problemi correlati