我在XAML / WPF中有一个Border,我用它来给对话框中的文本标题赋一个全段宽的下划线。我将其BorderThickness属性设置为“0,0,0,1”。在某些地方,最终会使用2像素粗的下划线进行渲染,而在其他地方,它会正确显示为单像素下划线。我做错了什么?
这是我用来替换标签的可视化树的控件模板(模板的使用是无关紧要的,我原以为):
<ControlTemplate x:Key="HeaderTemplate" TargetType="{x:Type Label}">
<Border BorderThickness="0,0,0,1" Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Margin}">
<Border.BorderBrush>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="Black"/>
<GradientStop Offset="0.6" Color="Black"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush>
</Border.BorderBrush>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" Style="{StaticResource HeaderStyle}"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Padding}"/>
</Border>
</ControlTemplate>
我对WPF很陌生,所以我怀疑我遗漏了一些关于渲染模型的基本信息。
作为参考,我没有应用缩放变换(或任何其他类型的变换)。任何帮助,将不胜感激。 :)
答案 0 :(得分:8)
我认为你要找的是在你的XAML中设置这个属性:
SnapsToDevicePixels = “真”
参考:http://msdn.microsoft.com/en-us/library/vstudio/aa970908(v=vs.90).aspx
答案 1 :(得分:6)
元素占用的像素数取决于几个因素,包括:
您使用的数字应该被认为是彼此相对的,而不是根据它们的呈现方式的绝对值。
话虽如此,WPF 4.0将包含Layout Rounding,您可以使用它来减少应该具有相同厚度的线根据它们是否恰好穿过像素边界而呈现不同的情况。 / p>