2009-06-05 25 views
6

Estoy tratando de hacer una búsqueda en el cuadro de texto con un icono de lupa incrustado. Tengo el siguiente marcado hasta el momento:WPF SystemColors: color del borde del cuadro de texto

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

Sin embargo, no puedo encontrar la entrada en SystemColors que me dará el mismo color que la frontera cuadro de texto estándar. Este es un color azulado por defecto. ¿Estoy siendo realmente estúpido aquí?!?

EDITAR: por cierto, la imagen está contenida en un panel de pila porque estoy planeando poner una flecha desplegable allí también.

+0

No creo que estés siendo estúpido. He tenido el mismo problema al intentar encontrar el color del borde de un ListBox (del mismo color, creo). No estoy seguro de que haya aparecido en ninguna parte. –

+0

¿Puedes encontrar un ejemplo del color que deseas y obtener sus valores RGB? Esto podría ayudar a identificar de qué color se trata. – ChrisF

+0

Mejor elija el valor del color del borde del cuadro de texto, y úselo como borderbrush –

Respuesta

4

Puede intentar usar Microsoft.Windows.Themes.ListBoxChrome en lugar del borde; eso es lo que utiliza la plantilla predeterminada para Cuadro de texto:

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

usted debería ser capaz de utilizar simplemente ListBoxChrome en lugar de Frontera en lugar de volver a plantillas cuadro de texto para que coincida con el código que se presentan.

+0

Gracias por la sugerencia, pero parece que no funciona. No tengo frontera. – Grokys

+0

Es posible que tenga que volver a crear la plantilla de TextBox (o su cuadro de texto personalizado) para incluir ListBoxChrome; me funciona cuando utilicé ese código para cambiar la plantilla de control en un TextBox predeterminado. –

+0

@Groky: Parece que te estás perdiendo BasedOn-Property on Style. Tenía el mismo problema. Ver mi respuesta para el código (no encaja aquí) – dwonisch

2

pude conseguirlo mediante programación con:

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

Esto funcionó como un regalo, ¡salud! – TabbyCool

+1

Este no es el color correcto. Obtengo un color gris en lugar del azul adecuado en XP. –

1

Parece hacker, pero he tenido la mejor suerte mediante la creación de un cuadro de texto (tal vez colapsado) y la unión a su borde en cepillo.

3

Sobre la base de la respuesta de Nicholas Armstrong, que la solución está funcionando para mí:

Cuestiones relacionadas