3

これが私のボタンテンプレートです。

<Microsoft_Windows_Themes:ButtonChrome 
   x:Name="Chrome" 
   Background="{TemplateBinding Background}" 
   BorderBrush="{TemplateBinding BorderBrush}" 
   RenderDefaulted="{TemplateBinding IsDefaulted}" 
   RenderMouseOver="{TemplateBinding IsMouseOver}" 
   RenderPressed="{TemplateBinding IsPressed}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Image 
               Source="{TemplateBinding ImageSource}" 

               RenderOptions.BitmapScalingMode="NearestNeighbor"

               SnapsToDevicePixels="True"

               HorizontalAlignment="Center"
               VerticalAlignment="Center"
              Stretch="None"
               />
        <ContentPresenter 
            Grid.Column="1"
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
            Margin="{TemplateBinding Padding}" 
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
            RecognizesAccessKey="True"/>
    </Grid>
</Microsoft_Windows_Themes:ButtonChrome>

今、あなたはこの質問に従って見ることができます私の画像は私が試したStackOverflowでぼやけています..

RenderOptions.BitmapScalingMode="NearestNeighbor"

すべてのレベルで、グリッド、クローム..、SnapsToDevicePixelsのさまざまな組み合わせを試しましたが、画像が正しく表示されません。Stretch = Noneを設定しましたが、画像は中央に配置されますが、それでも自動的に拡大するのはなぜですか?

これが出力であり、非常に苛立たしいものです。

WPFの悪い画像http://akashkava.com/blog/wp-content/uploads/2009/12/BadButton.PNG

画像の実際のサイズは16x16ですが、Windows Maginifierを使用して、画像は実際には20x20としてレンダリングしようとしていることがわかりました。大きな画像の場合は、右端と下部がトリミングされます。Stretch = Noneの場合、画像は16x16で正しくレンダリングされるはずだと思いますが、ここで問題を明確にできる人はいますか?

4

5 に答える 5

1

ボタンスタイルを作成し、コントロールテンプレートをオーバーライドして、カスタムの高さを指定しました。

WPF4で現在利用可能な新しいプロパティを試すことを検討することをお勧めします。HighQualityRenderOptions.BitmapScalingMode任せるか、宣言しないでください。

ルート要素(つまりメインウィンドウ)に次のプロパティを追加します:UseLayoutRounding="True"

以前はSilverlightでのみ使用可能だったプロパティにより、すべてのビットマップのサイズ設定の問題が修正されました。:)

注意してください-レイアウトの丸めが正確なレイアウトに与える影響のいくつかは次のとおりです。

  • 要素の幅や高さは、最大1ピクセルだけ拡大または縮小できます。

  • オブジェクトの配置は最大1ピクセル移動できます

  • 中央に配置された要素は、垂直方向または水平方向に最大1ピクセルずれることができます

詳細はこちら: http: //blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx

于 2010-04-29T06:11:34.940 に答える
1

これは、Microsoft が修正していない既知の wpf の問題です。唯一の回避策は、サイズが小数のピクセル部分にならないようにサイズを調整することです。

于 2009-12-15T18:23:09.833 に答える
1

画像のサイズを変更すればOKです。

于 2009-12-16T02:01:50.957 に答える
1

画像要素に明示的な幅と高さを設定してみてください。

于 2009-12-14T15:37:00.723 に答える
1

画像が 16x16 だと思っていても、WPF が 20x20 だと思っている場合は、おそらく画像自体に DPI の問題があります。あなたの画像はPNGですか?代わりに jpg として保存し、それがどのように見えるかを確認してください。

参照: http://www.hanselman.com/blog/BeAwareOfDPIWithImagePNGsInWPFImagesScaleWe​​irdOrAreBlurry.aspx

于 2010-04-29T06:21:33.283 に答える