2016-09-06 5 views
1

Während WPF zu lernen, ich habe einen Stil geschaffen, die abgerundeten Ecken auf eine Textbox gilt und setzte auch die Hintergrundfarbe, wenn die Steuerung hat den Fokus:Stil funktioniert nicht richtig

<Style TargetType="TextBox" x:Name="efTextBoxStyle"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate > 
       <Border x:Name="border" BorderThickness="1" CornerRadius="2"> 
        <ScrollViewer x:Name="PART_ContentHost"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter TargetName="border" Property="BorderBrush" Value="Red"/> 
         <Setter Property="Background" Value="Blue"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Zur Laufzeit Wenn das Steuerelement den Fokus erhält, wird der Rahmen wie erwartet in roter Farbe gerendert, aber die Hintergrundfarbe des Textfelds ändert sich nicht in blau.

Was ist los?

+1

Sie haben targetname = border vergessen. Im Moment hat es nichts, um den Hintergrund zu setzen. –

+0

@DannyvanderKraan soweit ich das Problem verstehe, will Michael den Textbox-Hintergrund ändern, nicht den der Grenze. – enkryptor

+0

Ja, aber er ersetzte das Kontrollfeld. Was ist die Textbox in dieser Vorlage? –

Antwort

2

Setter mus haben einen TargetName sonst weiß es nicht, wo der Wert gesetzt werden soll. In Ihrem Fall: <Setter TargetName="border" Property="Background" Value="Blue"/>

1

Das ist ein wenig verwirrend, aber für den Hintergrund klingen könnten Sie Ihre Zielname = „border“ brauchen

Für den Vordergrund auf der anderen Seite, würden Sie nicht brauchen:

 <Style TargetType="TextBox" x:Name="efTextBoxStyle"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate x:Name="bal"> 
        <Border x:Name="border" BorderThickness="1" CornerRadius="2"> 
         <ScrollViewer x:Name="PART_ContentHost"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsFocused" Value="True"> 
          <Setter TargetName="border" Property="BorderBrush" Value="Red"/> 
          <Setter TargetName="border" Property="Background" Value="blue"/> 
          <Setter Property="Foreground" Value="yellow"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style>