4

環境

Win 8、VS 2012、.NET 4、WPF、画面ネイティブ解像度 1920x1080@96DPI

XAML

<Border BorderThickness="1" BorderBrush="Red" Width="20" Height="20">
    <Border BorderThickness="1" BorderBrush="Blue" />
</Border>

問題

DPI が 96 の場合、境界線はきれいに見えますが、DPI を 120 に変更すると、境界線が完全にピクセルで整列されなくなります。

私が試したこと

1) 次のプロパティを設定 - RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True"- 両方の境界線で、より高い DPI によるアンチエイリアシングとにじみの問題を軽減しますが、内側の境界線には通常、右側と下部に 1 ピクセルのマージンがあるようです。

2) 次のコードは、問題を回避するのに役立ちません。

<Grid Width="20" Height="20">
    <Border BorderThickness="1" BorderBrush="Red" />
    <Border BorderThickness="1" BorderBrush="Blue" Margin="1" />
</Grid>

3) Borders の代わりに Rectangles を使用すると、同じ問題が発生します。

4) この問題は、VirtualBox で実行されているゲスト Win 7 でも持続します。

5)編集- 内側のマージンがなく、外側の「境界線」の厚さが 2px であるという点で、これは少し良く見えます。

<Canvas Width="20" Height="20">
    <Polygon Points="0,0 20,0, 20,20, 0,20" StrokeThickness="1" Stroke="Red" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True" />
    <Polygon Points="1,1 19,1, 19,19, 1,19" StrokeThickness="1" Stroke="Blue" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True" />
</Canvas>

質問

内側の余白やアンチエイリアシング/ブリーディングなしで境界線をピクセルパーフェクトにする方法を教えてください。

DPI が 96 以外の場合、コード ビハインドを使用して境界線のサイズを変更することはできません。(XAML に基づいて) ベクター アイコンを作成しようとしているため、XAML のみに固執する必要があります。

4

1 に答える 1

3

ブラボー Microsoft - https://connect.microsoft.com/VisualStudio/feedback/details/798513/wpf-dpi-rendering-issues-with-two-borders

繰り返しますが、この問題は対処も修正もされません。

于 2013-09-20T14:41:31.457 に答える