这是我的XAML代码(我没有任何代码隐藏):
<Canvas>
<Line
X1="100" Y1="100"
X2="200" Y2="100"
Stroke="Black"
StrokeDashArray="1 1"
SnapsToDevicePixels="True"
/>
<Rectangle Height="20"
Canvas.Left="101"
Canvas.Top="141"
Width="50"
Stroke="Black"
StrokeThickness="1"
StrokeDashArray="1 1"
StrokeEndLineCap="Flat"
StrokeDashOffset="1"
SnapsToDevicePixels="True"
/>
</Canvas>
在设计期间,“设计器”窗口显示以下内容(正确):
但是当我运行该应用程序时,它的呈现方式如下:
如您所见,这条线很好,但矩形被绘制为实线,尽管它应具有虚线笔划。
为什么会发生这种情况,我该如何解决?我在Windows 10 Pro上,我的屏幕分辨率为2560 x 1440,DPI设置为96,有效DPI为93.03。我正在使用最新的Expression Blend版本以及最新的Visual Studio 2017社区版。
编辑:
问题已解决,请参阅下面的Richardissimo的answer。最终渲染:
答案 0 :(得分:2)
令人着迷。答案在底部...
我决定建立一个由双方共享的资源,以确保没有发生任何有趣的事情,并帮助完成我将要描述的各种组合。
<DoubleCollection x:Key="strokeDashArray">
<system:Double>1</system:Double>
<system:Double>1</system:Double>
</DoubleCollection>
其中
xmlns:system="clr-namespace:System;assembly=mscorlib"
,然后通过将其更改为使用在线和矩形上使用
StrokeDashArray="{StaticResource strokeDashArray}"
问题中的图像显示矩形为灰色,但线(以像素为单位)变为“黑白”(重复)。
我发现有趣的是将值更改为“ 1 2”:线(以像素为单位)变为“黑白色”(重复),而矩形变为“黑白色”(重复)。
将其更改为“ 2 1”使行“ black black white”;但矩形变为“黑灰色”。
将其更改为“ 2 2”将使行“ black black white white”变成矩形“ black grey white grey”。
因此,矩形的渲染方式肯定与直线不同。
我认为可能是这样的事实:一个在X = 100,另一个在X = 101,因此抗锯齿可能会被抵消;但是将101更改为100并没有什么区别,并且移动矩形以使顶部或底部线条与该线条对齐也无济于事。
也没有将StrokeDashOffset
更改为0。
有趣的是,将矩形的StrokeThickness
更改为1.1会使它更“点”。但并非始终如一,所以这不是解决方案。
知道了:将其添加到矩形中:
RenderOptions.EdgeMode="Aliased"