你可能注意到當我們創建一個1px 粗的line,在silverlight裏的渲染結果往往明顯不是1px,而是比1px粗。
注:在WPF 裏可以設置SnapToDevice="True" 但是silverlight裏沒有SnapToDevice屬性
<Line X1="10" Y1="20" X2="200" Y2="20" StrokeThickness="1" Stroke="Red" />
我們寫的StrokeThickness="1" 但是實際效果如上。
如何解決這個問題,有一個簡單的解決辦法。就是使用RenderThansform
<Line X1="10" Y1="20" X2="200" Y2="20" StrokeThickness="1" Stroke="Red" >
<Line.RenderTransform>
<TranslateTransform X="0.5" Y="0.5" />
</Line.RenderTransform>
</Line>
效果如下:
可以看到線基本變成了1px寬。但是實際測試中發現如果 Canvas 有縮放,又會有線寬變化。
說到底Silverlight的渲染環境還是有些實際問題。像之前比較著名的字體渲染髮虛的問題,後面字體倒是有所改進,但是其他問題依舊。
難道Silverlight的渲染是參照遊戲引擎或者什麼結構來設計的?