4

次の問題。C#で小さなものを描いてみました。これをCanvasで実行したいと思います。ただし、Canvasがなくても、線はぼやけて表示されます。単純なデモプロジェクトですでに失敗している最も単純なことは、次のコードです。

<UserControl x:Class="Drawing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Line Y1="1" Y2="300" StrokeThickness="1" 
              Stroke="Black" Margin="10 0 0 0"/>
    </Grid>
</UserControl>

この線はぼやけて表示されています。いろいろ試してみましたが、くっきりとした1ピクセル幅のラインを実現する方法がわかりません。

私は次のことを試みました:

  • UseLayoutRounding="True"
  • ここで提供されているピクセルスナッパークラスを試しましたが、これも機能しません。ここに、明らかに同じ問題があり、このカスタムピクセルスナッパーでも失敗したXavier Poinasスレッド)の答えがあります。 「このクラスはアイテムの境界を丸いピクセルにスナップすることで機能することを理解しているようですが、座標私が使用しているのはすでに整数です。パスの場合、境界をスナップしても、コンテンツが丸いピクセルに収まるとは限りません。」)。

解決策が見つかった場合は、Canvasによって保持されている線をスナップできると便利です。

この理由は次のとおりです。技術的な理由から、カスタム境界線(サイズ変更)を実装する境界線のないOOBアプリケーションと、最小化、最大化、および閉じるアイテムを含むカスタムアプリケーションバーが必要でした。これらのアイコンを手で、線などで描いてみました。

BarIcons

もっと簡単な方法はありますか?画像リソースを使いたくないだけです。ありがとう!

どんな助けでも歓迎です。

4

1 に答える 1

5

座標はピクセル間のポイントです。

表示されているぼやけた線は、レンダリングエンジンが、1ピクセルの線がカ​​バーする両方のピクセル間で描画を均等に広げようとした結果です。

これにより、エンジンは0,0からmaxX、maxYまで動作し、部分的なピクセルレンダリングを使用できます。

座標に0.5を加えると、鋲のようにシャープに見えます。

または、0.5,0.5に変換します

于 2012-10-09T22:03:05.267 に答える