2012-08-01 16 views
9

Ich habe hier zahlreiche ähnliche Threads gefunden, aber keine, die mein spezifisches Problem zu behandeln scheinen.Binden eines WPF-Style-Triggers an eine benutzerdefinierte Abhängigkeitseigenschaft

Ich muss den Hintergrund eines Textfelds unter bestimmten Bedingungen markieren. Ich habe eine Highlight-Eigenschaft erstellt und versucht, einen Trigger in einem Stil zu verwenden, um ihn festzulegen, aber er markiert den Text nie wirklich.

Hier ist mein Stil, vereinfacht:

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

Elements ist definiert als:

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

Dann habe ich den Abschnitt, wo der Stil angewendet wird:

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

In der Code hinter der DataElement-Klasse ist der folgende:

Ein DataElement, das letztlich von UserControl abgeleitet wird und einen Verweis auf TextBox-Objekte sowie andere Objekte enthält.

In der CustomForm-Klasse, die alle DataElement-Objekte enthält, habe ich die folgenden, um die Farbe festzulegen.

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow; 

Also, das erste Problem ist, dass die Highlight-Eigenschaft für das Dataelement Einstellung nicht dazu führt, der Textbox Hintergrund in gelb zu ziehen. Das andere Problem ist, dass ich feststelle, dass ich diesen Stil auf alle Textfelder anwende, und ich könnte Textfelder in anderen Bereichen haben, die nicht tatsächlich in einem DataElement enthalten sind, was ein bindendes Problem verursachen kann.

+0

Versuchen einen Setter ‚Hintergrund‘ zu Ihrem Stil –

+0

habe ich hinzufügen ein Setzer dafür. – WPFNewbie

+0

Ich habe viel vom Style weggelassen, um es einfach zu halten und mich auf die Bereiche zu konzentrieren, in denen ich das Problem vermute. – WPFNewbie

Antwort

5

Versuchen Sie, Ihre Trigger zu einem Datatrigger Konvertieren und fügen hinzu, dass eine Bindung direkt an der Steuerung der Data aussehen wird, etwa so:

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

Warum? Der einfache '' 'Trigger''' sollte Abhängigkeitseigenschaften unterstützen, oder? – boli

Verwandte Themen