我遇到一個很奇怪的事情:一個TreeView包含的項目(圖像),這種方式聲明在XAML:圖像大小取決於圖像的色彩位深
<ControlTemplate x:Key="ImageTemplate">
<Image VerticalAlignment="Top"
Visibility="{Binding IsImageVisible,Converter={StaticResource BoolToVisibility}}"
RenderOptions.BitmapScalingMode="NearestNeighbor"
SnapsToDevicePixels="True"
Stretch="None">
<Image.Source>
<BitmapImage UriSource="c:\\imageBMP4.bmp" />
<!-- <BitmapImage UriSource="c:\\imageBMP8.bmp" /> -->
<!-- <BitmapImage UriSource="c:\\imageBMP24.bmp" /> -->
<!-- <BitmapImage UriSource="c:\\imageBMP32.bmp" /> -->
<!-- <BitmapImage UriSource="c:\\imagePNG8.png" /> -->
<!-- <BitmapImage UriSource="c:\\imagePNG24.png" /> -->
<!-- <BitmapImage UriSource="c:\\imagePNG32.png" /> -->
<!-- <BitmapImage UriSource="c:\\imageJPG24.jpg" /> -->
</Image.Source>
</Image>
</ControlTemplate>
所有圖像都是640 * 480,填充與藍白色水平1像素線。
我體驗到什麼,如果我使用4個或8位位圖(BMP),它們呈現精細,像素到像素樹上的屏幕,尺寸640 * 480。 (然而,滾動樹到端導致呈現問題,如果多個圖像是在樹中,參見:TreeView/ScrollView rendering bug with bitmaps?) 渲染圖像(8位BMP)在樹(半尺寸):
然而如果我改變到24或32位圖像(BMP/PNG/JPG),它們被strecthed到853 * 640(1.33 *原始尺寸),這樣顯示strecthed /模糊。 (但是,這種情況下,滾動樹到底能正常工作,沒有渲染問題)樹 渲染圖像(24位BMP)(一半大小):
這是什麼行爲,爲什麼?簡單地改變源圖像的位深度爲什麼改變渲染的圖像尺寸?
我認爲這可能是原因:'其實,我已經看到了定期與PNG圖像。看起來,PNG的默認分辨率是72dpi,而WPF的默認屏幕分辨率是96dpi。 WPF試圖通過將png位圖縮放到像素大小的133%來考慮這一點,這在技術上是正確的,但通常不是用戶想要的。您可以使用GIF或JPG代替,也可以將圖像與LayoutTransform它擴展到它的大小爲0.75組合,或只是堅持與設置圖像控制explicitly.'的大小 – Zotyi