2010-09-30 14 views
9

Chcę, aby tekst WPF TextBox miał granicę DarkBlue i grubość równą 1. Chcę, aby WPF posiadało tę granicę (DarkBlue, grubość ustawiona na 1), nawet jeśli zaznaczono pole TextBox.Ramka pola tekstowego WPF po wybraniu?

Próbowałem wykonać to zadanie poniższym kodem. Jednak w ogóle nie działa. Wszelkie pomysły lub wskazówki? Każda pomoc będzie bardzo ceniona.

<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 Zauważ, że pole tekstowe nie ma właściwość IsSelected.

+2

"nawet po zaznaczeniu pola tekstowego": co masz na myśli? Obramowanie nie zmienia się po zaznaczeniu pola TextBox, więc nie potrzebujesz w ogóle żadnych wyzwalaczy ... po prostu ustaw style w stylu –

Odpowiedz

20

prostu zobaczyć czy to chcesz ...

<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

Masz tę samą logikę, gdy "IsMouseOver" Prawda i fałsz. Zmień jeden i powinieneś zobaczyć coś.

2

Sprawdź właściwość obiektu FrameworkElement (przodek TextBox). Jego celem jest zdefiniowanie stylu zastosowanego po wybraniu elementu.

4

Myślę, że problem wynika z konieczności wartość wyzwalania Property zawierający TextBox. Potrzebujesz tylko nazwy nieruchomości.

<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> 
Powiązane problemy