我正在创建一个包含直线的按钮样式:
<Button VerticalAlignment="Center" HorizontalAlignment="Center">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="#F0F0F0"/>
<Setter Property="Width" Value="50"/>
<Setter Property="Height" Value="50"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Background="{TemplateBinding Background}">
<Path Stroke="Black" StrokeThickness="1" Data="M0,0 L10,0"
VerticalAlignment="Center" HorizontalAlignment="Center"
SnapsToDevicePixels="True" UseLayoutRounding="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
但我总是得到一条2 px宽的线,而不是1 px宽的线:
我尝试使用下面的(与父Grid
和Path
元素本身相关):UseLayoutRounding="True"
、SnapsToDevicePixels="True"
、RenderOptions.BitmapScalingMode="Fant"
、RenderOptions.EdgeMode="Aliased"
。这一切都没有帮助我,并没有使线看起来正常。以前,上述之一或它们的组合总是有帮助的。
我尝试确定窗口的系统DPI值和WPF知道的值:
PresentationSource presentationSource = PresentationSource.FromVisual(window);
double wpfDpi = 96.0 * presentationSource.CompositionTarget.TransformToDevice.M11;
double currentDpi = GetDpiForWindow(hWnd);
两个值相同(120)-应用程序知道刻度。
Taget平台:NET Framework 4.5
操作系统:Windows 10
1条答案
按热度按时间sqserrrh1#
将
RenderOptions.EdgeMode="Aliased"
添加到Path
对象。这将迫使一个1像素宽的线到精确的像素边界,给你一个清晰的图形。
你不需要
UseLayoutRounding
或SnapsToDevicePixels
。