WPF虚线矩形形状无法正确呈现

时间:2018-07-18 15:01:03

标签: wpf xaml

这是我的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>

在设计期间,“设计器”窗口显示以下内容(正确):

enter image description here

但是当我运行该应用程序时,它的呈现方式如下:

enter image description here

如您所见,这条线很好,但矩形被绘制为实线,尽管它应具有虚线笔划。

为什么会发生这种情况,我该如何解决?我在Windows 10 Pro上,我的屏幕分辨率为2560 x 1440,DPI设置为96,有效DPI为93.03。我正在使用最新的Expression Blend版本以及最新的Visual Studio 2017社区版。

编辑:

问题已解决,请参阅下面的Richardissimoanswer。最终渲染:

enter image description here

1 个答案:

答案 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"