2009-06-05 68 views
6

Tôi đang cố gắng tạo một TextBox tìm kiếm bằng biểu tượng kính lúp được nhúng. Tôi có đánh dấu sau cho đến thời điểm này:WPF SystemColors: màu của đường viền TextBox

<Border DockPanel.Dock="Bottom" Margin="2,4,0,4" 
     BorderThickness="1" SnapsToDevicePixels="True" 
     BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"> 
    <DockPanel> 
     <StackPanel Orientation="Horizontal" DockPanel.Dock="Right"> 
      <Image Source="/Resources/search-13x13.png" Width="13"/> 
     </StackPanel> 
     <TextBox Name="searchTextBox" DockPanel.Dock="Bottom" BorderThickness="0" 
       Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}"/> 
    </DockPanel> 
</Border> 

Tuy nhiên, tôi không thể tìm thấy mục nhập trong SystemColors sẽ cho tôi cùng màu với đường viền TextBox chuẩn. Đây là màu xanh lam theo mặc định. Tôi có thực sự ngu ngốc ở đây không?!?

CHỈNH SỬA: btw, hình ảnh được chứa trong một chồng xếp chồng vì tôi cũng đang định đặt một mũi tên thả xuống trong đó.

+0

Tôi không nghĩ bạn đang ngu ngốc - Tôi đã gặp vấn đề tương tự khi cố gắng tìm màu của đường viền ListBox (cùng màu, tôi nghĩ). Tôi không chắc nó nổi lên ở đâu cả. –

+0

Bạn có thể tìm thấy ví dụ về màu bạn muốn và nhận giá trị RGB của nó không? Điều này có thể giúp xác định màu nào. – ChrisF

+0

Tốt hơn hãy chọn giá trị màu của đường viền hộp văn bản và sử dụng nó làm đường viền biên giới –

Trả lời

4

Bạn có thể thử sử dụng Microsoft.Windows.Themes.ListBoxChrome thay vì Đường viền; đó là những gì mẫu mặc định cho TextBox sử dụng:

<ControlTemplate TargetType="TextBoxBase" 
       xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> 
    <mwt:ListBoxChrome Name="Bd" SnapsToDevicePixels="True"> 
     <ScrollViewer Name="PART_ContentHost" 
         SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> 
    </mwt:ListBoxChrome> 
    <ControlTemplate.Triggers> 
     <Trigger Property="UIElement.IsEnabled" Value="False"> 
      <Setter TargetName="Bd" Property="Panel.Background" 
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /> 
      <Setter Property="TextElement.Foreground" 
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

Bạn sẽ chỉ có thể sử dụng ListBoxChrome thay vì viền thay vì tái tạo khuôn mẫu cho TextBox khớp với mã bạn đã trình bày.

+0

Cảm ơn đề xuất nhưng điều đó dường như không hoạt động. Tôi không có biên giới. – Grokys

+0

Bạn có thể phải lại mẫu TextBox (hoặc TextBox tùy chỉnh của bạn) để bao gồm ListBoxChrome; nó làm việc cho tôi khi tôi sử dụng mã đó để thay đổi mẫu điều khiển trên một TextBox mặc định. –

+0

@Groky: Có vẻ như bạn đang thiếu BaseOn-Property on Style. Đã xảy ra sự cố tương tự. Xem câu trả lời của tôi cho mã (nó không phù hợp ở đây) – dwonisch

2

tôi đã có thể để có được chương trình khác với:

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

Điều này làm việc một điều trị, cổ vũ! – TabbyCool

+1

Đây không phải là màu phù hợp. Tôi nhận được một màu xám-ish thay vì màu xanh thích hợp trên XP. –

1

Dường hackish, nhưng tôi đã có may mắn tốt nhất bằng cách tạo ra một textbox (có lẽ sụp đổ) và gắn vào bàn chải biên giới của nó.

3

Dựa trên câu trả lời Nicholas Armstrong, giải pháp mà đang làm việc cho tôi:

<Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomTextBox}"> 
       <mwt:ListBoxChrome x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" RenderMouseOver="{TemplateBinding IsMouseOver}"> 
         <ScrollViewer x:Name="PART_ContentHost" /> 
       </mwt:ListBoxChrome> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
Các vấn đề liên quan