2009-07-26 10 views
11

Lets sagen, dass ich die folgenden haben:Wie man Style.Triggers einen anderen Namen Stil auslösen angewendet werden

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="BorderBrush" Value="Gray" /> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="true"> 
      <Setter Property="BorderBrush" Value="Green" /> 
      <Setter Property="BorderThickness" Value="2" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Dies funktioniert gut, und es gibt nichts zu viel ist hier falsch, aber es ist ein ziemlich einfacher Fall . Was passiert, wenn ich den IsFocused Stil Staat als exsplicit Stil aufgeführt haben wollen, wie man diese Art Referenz tun, wie die IsFocused Stil zu sein, das heißt

<Style x:key="ActiveStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="BorderBrush" Value="Green" /> 
    <Setter Property="BorderThickness" Value="2" /> 
</Style> 

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="BorderBrush" Value="Gray" /> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="true"> 
      -- Here I want to reference ActiveStyle and not copy the copy the setters 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Antwort

11

Ich glaube nicht, Sie können Sie aber einen Stil wiederverwenden können diese übrigens:

<Style x:Key="ActiveStyle" TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="true"> 
      <Setter Property="BorderBrush" Value="Green" /> 
      <Setter Property="BorderThickness" Value="2" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ActiveStyle}"> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="BorderBrush" Value="Gray" /> 
</Style> 

ich keine andere Lösung sehen :(

+0

Nicht ideal Ich stimme zu:

<ControlTemplate x:Key="NotFocused" TargetType="{x:Type TextBox}"> . . . </ControlTemplate> <ControlTemplate x:Key="Focused" TargetType="{x:Type TextBox}"> . . . </ControlTemplate> 

Sie dann mit dem Auslöser in ein Standardformat für den TextBox erstellen aber ich muss danke tun – vdhant

7

WPF So eine spezielle Eigenschaft für dieses FrameworkElement.FocusVisualStyle bietet voran gehen und zuweisen, dass :)

<TextBox FocusVisualStyle="{StaticResource ActiveStyle}" ..... 

Oder eine andere Art und Weise mit Setter

<Style TargetType="{x:Type TextBox}"> 
<Setter Property="BorderThickness" Value="1" /> 
<Setter Property="BorderBrush" Value="Gray" />  
<Setter Property="FocusVisualStyle" > 
    <Setter.Value> 
    <Style x:key="ActiveStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green" /> 
     <Setter Property="BorderThickness" Value="2" /> 
    </Style> 
    </Setter.Value> 
    </Setter> 
</Style> 
6

Es gibt noch eine dritte Möglichkeit, dies zu tun.

Erstellen Sie zwei benannte Steuer Vorlagen für Ihre Steuerung:

<Style TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="Template" Value="{StaticResource Focused}" /> 
     </Trigger> 
     <Trigger Property="IsFocused" Value="False"> 
      <Setter Property="Template" Value="{StaticResource NotFocused}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Tony

+1

Das verursacht eine Ausnahme für mich: "Style-Objekt darf die Style-Eigenschaft des Objekts nicht beeinflussen, auf das es angewendet wird." Es ist irgendwie Offensichtlich, wie kann sich ein Stil zu einem anderen Stil verändern, aber trotzdem weiter arbeiten? – svick

+0

Ich hätte schwören können, dass ich ein Beispiel dafür in meiner Bewerbung hatte, aber ich kann es jetzt nicht finden. Ich erinnere mich nicht, dass dieser Fehler in meiner Entwicklung auftrat, was eigentlich gar nichts bedeutet. Ich werde irgendwann damit spielen müssen, wenn ich ein paar Minuten Zeit habe. –

+0

@svick: Ich habe mein Beispiel bearbeitet, so dass es nun Code verwendet, der funktioniert. Es ist jetzt möglicherweise nicht vollständig relevant für die ursprüngliche Frage, da es Steuerelementvorlagen und einen Standardstil verwendet. Aber das funktioniert. –

Verwandte Themen