WPF TextBox ugly borders problem

border, textbox, wpf

Solution

You could try editing the template for the textboxes and changing the border name Bd to a "real" border instead of the chrome one. Like this:

<ControlTemplate x:Key="TextBoxBaseControlTemplate1" 
          TargetType="{x:Type TextBoxBase}">
  <Border x:Name="Bd" SnapsToDevicePixels="True" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}"
          BorderThickness="{TemplateBinding BorderThickness}" >
    <ScrollViewer x:Name="PART_ContentHost" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
  </Border>
  <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>

add this setter to your style to enable the template:

<Setter Property="Template" 
        Value="{DynamicResource TextBoxBaseControlTemplate1}"/>  

Problem

I want to override the default TextBox borders in WPF. I have this style that applies on all TextBoxes. ``` <!-- StyleTextBox--> <Style x:Key="StyleTextBox" TargetType="{x:Type TextBox}"> <Setter Property="MinHeight" Value="20" /> <Setter Property="HorizontalAlignment" Value="Left"/> <Setter Property="Margin" Value="3"/> <Setter Property="IsEnabled" Value="{DynamicResource WriteAble}"/> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="BorderBrush" Value="{StaticResource ButtonFont_DarkGray}" /> <Style.Triggers> <!--Resolves multiline textbox vertical alignment problem--> <Trigger Property="TextWrapping" Value="NoWrap"> <Setter Property="VerticalContentAlignment" Value="Center" /> </Trigger> </Style.Triggers> </Style> ``` I added `SnapsToDevicePixels="True"` to display borders correctly on LCD monitors. But, every TextBox seems to be different. Some borders are missing, or gray.. Does anyone know why?

Original source