2010-09-30 24 views
9

Quiero hacer que un WPF TextBox tenga un borde Azul Oscuro y un grosor igual a 1. Quiero hacer que el WPF tenga este borde (Azul Oscuro, espesor establecido en 1) incluso cuando se selecciona el Cuadro de texto.WPF TextBox ¿Borde cuando está seleccionado?

Intenté hacer esta tarea con el siguiente código. Sin embargo, no funciona en absoluto. ¿Alguna idea o sugerencia? Cualquier ayuda sería muy apreciada.

<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 Tenga en cuenta que el cuadro de texto no tiene una propiedad IsSelected.

+2

"incluso cuando se selecciona el cuadro de texto": ¿qué quiere decir? El borde no cambia cuando se selecciona TextBox, por lo que no necesita activadores ... simplemente coloque los setters en el estilo –

Respuesta

20

acaba de ver es esto que quiere ...

<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

Tiene la misma lógica para cuando "IsMouseOver" también es falso. Cambia uno y deberías ver algo.

2

Compruebe FocusVisualStyle propiedad del objeto FrameworkElement (ancestro de TextBox). Su propósito es definir el estilo aplicado cuando se selecciona un elemento.

4

Creo que su problema se debe a que tiene el valor de activación de la propiedad que contiene cuadro de texto. Solo necesitas el nombre de la propiedad.

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