2009-06-05 3 views
6

Я пытаюсь выполнить поиск TextBox со встроенной иконкой увеличительного стекла. У меня есть следующий код до сих пор:WPF SystemColors: цвет границы 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> 

Однако, я не могу найти запись в SystemColors, который даст мне тот же цвет, что и стандартный TextBox границы. По умолчанию это синий цвет. Я действительно глуп здесь?!?

EDIT: btw, изображение содержится в стеке, потому что я планирую также установить стрелку вниз.

+0

Я не думаю, что вы глупы. У меня была такая же проблема, пытаясь найти цвет границы ListBox (тот же цвет, я думаю). Я не уверен, что это всплыло где-нибудь. –

+0

Можете ли вы найти пример нужного цвета и получить его значения RGB? Это может помочь определить, какой цвет он есть. – ChrisF

+0

Лучше выбрать значение цвета границы текстового поля и использовать его как borderbrush –

ответ

4

Вы можете попробовать использовать Microsoft.Windows.Themes.ListBoxChrome вместо границы; это то, что шаблон по умолчанию для TextBox использует:

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

Вы должны быть в состоянии использовать только ListBoxChrome вместо границы, а не повторно шаблонного TextBox, чтобы соответствовать коду вы представили.

+0

Спасибо за предложение, но это, похоже, не работает. У меня нет границы. – Grokys

+0

Возможно, вам придется переформатировать TextBox (или свой собственный TextBox), чтобы включить ListBoxChrome; он работает для меня, когда я использовал этот код для изменения шаблона управления по умолчанию TextBox. –

+0

@Groky: Кажется, вам не хватает BasedOn-Property on Style. Была такая же проблема. См. Мой ответ для кода (он здесь не подходит) – dwonisch

2

Я был в состоянии получить его с программно:

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

Это работало, приветствие! – TabbyCool

+1

Это неправильный цвет. Я получаю серо-иш-цвет вместо правильного синего цвета на XP. –

1

кажется хак, но я имел удач, создавая текстовое поле (возможно, разрушились) и привязку к ее границе кисти.

3

На основании ответа Николаса Армстронга, что решение работает для меня:

<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> 
Смежные вопросы