Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 按钮模板无法清晰地渲染图像_Wpf_Image_Blurry - Fatal编程技术网

Wpf 按钮模板无法清晰地渲染图像

Wpf 按钮模板无法清晰地渲染图像,wpf,image,blurry,Wpf,Image,Blurry,这是我的按钮模板 <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderDefaulted="{TemplateBinding IsDefaulted}" RenderMouseOver="{TemplateBin

这是我的按钮模板

<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>
在所有级别上,网格、镀铬。。并尝试了各种SnapsToDevicePixels组合,但图像无法正确显示。我将“拉伸”设置为“无”,图像在中心对齐,但为什么它会自动拉伸

这里是输出和它非常令人沮丧


图像的实际大小是16x16,但我通过使用Windows Maginifier了解到,无论我做什么,图像实际上都试图渲染为20x20,对于较大的图像,它甚至会剪切最右侧和底部。我认为,当Stretch=None时,图像应该正确渲染为16x16,有人能澄清这里的问题吗?

尝试设置图像元素的显式宽度和高度。

这是一个已知的wpf问题,microsoft尚未解决。唯一的解决办法是调整大小,使其不会以小数像素部分的大小结束。

调整图像大小,这样就可以了。

我创建了一个按钮样式,并覆盖了控件模板,为其提供了自定义高度

您可能想考虑在WPF4中尝试新的可用属性。将

RenderOptions.BitmapScalingMode
保留为高质量,或者干脆不声明它

在根元素(即主窗口)上添加以下属性:
UseLayoutRounding=“True”

以前仅在Silverlight中可用的属性现在修复了所有位图大小问题。:)

请注意-一些效果 在精确布局上可以有:

  • 元素的宽度和/或高度最多可以增加或减少1个像素

  • 对象的放置最多可以移动1个像素

  • 居中图元最多可以垂直或水平偏离中心 1像素


更多信息请参见此处:

如果您认为您的图像是16x16,但WPF似乎认为它是20x20,那么您的图像本身可能存在DPI问题。你的图像是PNG吗?将其另存为jpg,然后查看其外观


Ref:

因为未明确调整大小的元素将倾向于(也有例外)采用其容器的大小。设置明确大小16x16将裁剪图像,我可以看到该图像仅显示16x16,但缺少的部分仍显示它试图显示20x20。当“水平对齐”和“垂直对齐”设置为“中心”时,它应该将自身杠杆拉伸到父容器,对吗?
RenderOptions.BitmapScalingMode="NearestNeighbor"