2010-09-30 83 views
9

Tôi muốn tạo một TextBox WPF có đường viền DarkBlue và độ dày bằng 1. Tôi muốn làm cho WPF có đường viền này (DarkBlue, độ dày được đặt thành 1) ngay cả khi TextBox được chọn.Đường viền hộp văn bản WPF khi được chọn?

Tôi đã thử thực hiện tác vụ này bằng mã sau. Tuy nhiên, nó không hoạt động chút nào. Bất kỳ ý tưởng hay gợi ý nào? Mọi sự trợ giúp sẽ rất được trân trọng.

<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 Lưu ý rằng hộp văn bản không có một tài sản IsSelected.

+2

"ngay cả khi TextBox được chọn": ý bạn là gì? Đường viền không thay đổi khi TextBox được chọn, vì vậy bạn không cần kích hoạt gì cả ... chỉ cần đặt các bộ định dạng theo kiểu –

Trả lời

20

chỉ thấy là điều này, bạn muốn ...

<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

Bạn có cùng một logic khi "IsMouseOver" True cũng False. Thay đổi một và bạn sẽ thấy một cái gì đó.

2

Kiểm tra FocusVisualStyle thuộc tính của đối tượng FrameworkElement (tổ tiên của TextBox). Mục đích của nó là xác định kiểu được áp dụng khi một phần tử được chọn.

4

Tôi nghĩ vấn đề của bạn là do có giá trị kích hoạt tài sản chứa TextBox. Bạn chỉ cần tên của tài sản.

<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> 
Các vấn đề liên quan