2010-09-30 34 views
9

Ich möchte eine WPF TextBox haben einen DarkBlue Rahmen und Dicke gleich 1. Ich möchte die WPF haben diese Grenze (DarkBlue, Dicke auf 1 gesetzt), auch wenn die TextBox ausgewählt ist.WPF TextBox Rahmen, wenn ausgewählt?

Ich habe versucht, diese Aufgabe durch den folgenden Code zu tun. Es funktioniert jedoch überhaupt nicht. Irgendwelche Ideen oder Hinweise? Jede Hilfe würde sehr geschätzt werden.

<Style x:Key="ReadOnlyLargeTextBox" TargetType="{x:Type TextBox}" > 
     <Setter Property="Height" Value="80"/> 
     <Setter Property="MaxHeight" Value="80"/> 

     <Setter Property="VerticalScrollBarVisibility" Value="Visible"/> 
     <Style.Triggers> 
      <Trigger Property="TextBox.IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" Value="DarkBlue"/> 
       <Setter Property="BorderThickness" Value="1"/> 
      </Trigger> 
      <Trigger Property="TextBox.IsMouseOver" Value="False"> 
       <Setter Property="BorderBrush" Value="DarkBlue"/> 
       <Setter Property="BorderThickness" Value="1"/> 
      </Trigger> 
     </Style.Triggers> 


    </Style> 

P. S Beachten Sie, dass das Textfeld keine IsSelected Eigenschaft hat.

+2

"auch wenn die TextBox ausgewählt ist": was meinst du? Der Rahmen ändert sich nicht, wenn die TextBox ausgewählt ist, so dass Sie überhaupt keine Auslöser benötigen ... setzen Sie einfach die Setter in den Stil –

Antwort

20

gerade sehen, ist dies Sie wollen ...

<Style x:Key="TextBoxStyle1" BasedOn="{x:Null}" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="AllowDrop" Value="true"/> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Border x:Name="bg" BorderBrush="#FF825E5E" BorderThickness="1"> 
         <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </Border> 
        <ControlTemplate.Triggers> 

         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="BorderBrush" TargetName="bg" Value="DarkBlue"/> 
          <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
         </Trigger> 
         <Trigger Property="IsFocused" Value="True"> 
          <Setter Property="BorderBrush" TargetName="bg" Value="DarkBlue"/> 
          <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
         </Trigger> 

        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
1

Sie haben die gleiche Logik, wenn "IsMouseOver" sowohl True als auch False ist. Ändere einen und du solltest etwas sehen.

2

Überprüfen Sie FocusVisualStyle Eigenschaft des FrameworkElement-Objekts (Vorfahre von TextBox). Der Zweck besteht darin, den Stil zu definieren, der angewendet wird, wenn ein Element ausgewählt wird.

4

Ich denke, Ihr Problem zurückzuführen ist die Trigger-Eigenschaftswert enthält TextBox zu haben. Sie brauchen nur den Namen der Eigenschaft.

<Style x:Key="ReadOnlyLargeTextBox" TargetType="{x:Type TextBox}"> 
     <Setter Property="Height" Value="80"/> 
     <Setter Property="MaxHeight" Value="80"/> 

     <Setter Property="VerticalScrollBarVisibility" Value="Visible"/> 

     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="BorderBrush" Value="Blue"/> 
       <Setter Property="BorderThickness" Value="1"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" Value="Blue"/> 
       <Setter Property="BorderThickness" Value="1"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style>