2010-09-30 103 views
9

我想使WPF文本框有一個DarkBlue邊框和厚度等於1.我想讓WPF有這個邊框(DarkBlue,厚度設置爲1),即使當選擇TextBox時。WPF文本框邊框被選中時?

我試着用下面的代碼來完成這個任務。但是,它根本不起作用。 任何想法或提示?任何幫助將不勝感激。

<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注意文本框不具有IsSelected屬性。

+2

「即使當選擇了TextBox」:你是什麼意思?當TextBox被選中時,邊框不會改變,所以你根本不需要觸發器......只需將setters放入樣式中 – 2010-09-30 15:32:37

回答

20

只是看到這是你想要......

<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

對於何時「IsMouseOver」True和False也有相同的邏輯。改變一個,你應該看到一些東西。

2

檢查FocusVisualStyle FrameworkElement對象(TextBox的祖先)的屬性。它的目的是定義在選擇元素時應用的樣式。

4

我覺得你的問題是由於具有含文本框觸發屬性值。你只需要財產的名稱。

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