我想覆盖WPF中的默认TextBox边框。我有这种风格适用于所有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>
我添加SnapsToDevicePixels="True"
以在液晶显示器上正确显示边框。
但是,每个TextBox似乎都不同。有些边框丢失或灰色.. 有谁知道为什么?
答案 0 :(得分:7)
您可以尝试编辑文本框的模板,并将边框名称 Bd 更改为“真实”边框,而不是Chrome文件框。像这样:
<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>
将此setter添加到您的样式以启用模板:
<Setter Property="Template"
Value="{DynamicResource TextBoxBaseControlTemplate1}"/>
答案 1 :(得分:2)
WPF在向显示器呈现UI时尝试独立于设备,并且除非您告诉它,否则不会绘制“像素完美”的内容。尝试将其添加到您的风格中:
<Setter Property="SnapsToDevicePixels" Value="True" />
这应该告诉WPF沿着单个像素线渲染每个1像素厚的边框。
答案 2 :(得分:0)
您需要执行以下操作来解决该问题......
SnapsToDevicePixels="True"
不要指定宽度,请使用边距
<Setter Property="BorderBrush" HorizontalAlignment="Left" Margin="2,2,2,2"
Value="{StaticResource DarkGray}" />
希望这会有所帮助:)
答案 3 :(得分:0)
我认为左边框和上边框是样式化的,但是右边框和下边框保持灰色,虽然我在Style中明确说过BorderBrush = MyBrush。 你怎么看?如何尝试从TextBox中删除 3D效果?