2009-06-05 14 views
6

Próbuję wyszukać pole TextBox z osadzoną ikoną lupy. Mam następujący znaczników dotąd:Kolory systemu WPF: kolor ramki 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> 

Jednak nie mogę znaleźć wpisu SystemColors który da mi taki sam kolor jak standardowego TextBox granicy. Domyślnie jest to niebieski kolor. Czy jestem tutaj naprawdę głupi?!?

EDYCJA: Przy okazji, obraz jest zawarty w sterowniku, ponieważ planuję umieścić tam również strzałkę rozwijaną.

+0

nie sądzę, jesteś głupi - miałem ten sam problem, próbując znaleźć kolor obramowania listBox (ten sam kolor, jak sądzę). Nie jestem pewien, czy to jest gdziekolwiek. –

+0

Czy możesz znaleźć przykład koloru, który chcesz uzyskać i uzyskać jego wartości RGB? Może to pomóc w określeniu, jaki to jest kolor. – ChrisF

+0

Lepiej wybierz wartość koloru obramowania pola tekstowego i użyj go jako obramowania –

Odpowiedz

4

Możesz spróbować użyć Microsoft.Windows.Themes.ListBoxChrome zamiast Border; to co domyślny szablon dla TextBox używa:

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

Powinieneś być w stanie wykorzystać tylko ListBoxChrome zamiast granicy zamiast ponownie szablonów TextBox dopasować kod przedstawiony.

+0

Dzięki za sugestię, ale to nie działa. Nie mam granicy. – Grokys

+0

Może być konieczne ponowne szablonowanie TextBox (lub niestandardowego TextBox) w celu włączenia ListBoxChrome; działa to dla mnie, gdy użyłem tego kodu, aby zmienić szablon kontrolny na domyślnym TextBox. –

+0

@Groky: Wygląda na to, że brakuje Ci BasedOn-Property on Style. Miał ten sam problem. Zobacz moją odpowiedź na kod (nie pasuje tutaj). – dwonisch

2

udało mi się dostać to programowo z:

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

To działało, przyjemności! – TabbyCool

+1

To nie jest właściwy kolor. Dostaję szary kolor zamiast poprawnego niebieskiego na XP. –

1

Wydaje hackish, ale miałem najlepsze szczęścia tworząc tekstowe (może zwinięty) i wiązanie się z jego pędzla granicznym.

3

podstawie odpowiedzi Nicholasa Armstronga, że ​​rozwiązanie działa dla mnie:

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