轉帖|其它|編輯:郝浩|2010-12-16 17:37:52.000|閱讀 974 次
概述: 之前自己寫了個控件,中間有關于線形樣式的設置,包括線寬。一開始就發現1像素的線條會變的有點模糊,顏色變淡。當時也沒太在意。后來老板發現了這個問題,有的線1像素就是1像素,而有點線1像素實際上顯示成了2個像素,問我怎么回事。我說都是設置StrokeThickness=1,這個問題沒辦法解決。后來還是老板在網上找了部分答案。想想自己真的是不應該,反思。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
之前自己寫了個控件,中間有關于線形樣式的設置,包括線寬。一開始就發現1像素的線條會變的有點模糊,顏色變淡。當時也沒太在意。
后來老板發現了這個問題,有的線1像素就是1像素,而有點線1像素實際上顯示成了2個像素,問我怎么回事。我說都是設置StrokeThickness=1,這個問題沒辦法解決。后來還是老板在網上找了部分答案。想想自己真的是不應該,反思。
實驗發現Rectangle在Canvas中會出現這種情況,在Grid中就不會。都是Canvas半個像素惹得禍。
解決辦法如下:
1.Silverlight anti-aliasing woes
通過Math.Round進行設置
Canvas.SetTop(element, Math.Round(top));
而對于Line這一招似乎并不有效:
2.Silverlight Rectangles, Paths, and Line Comparison
給線條的起始坐標加上半個像素的偏移
<Line Stroke="Black" StrokeThickness="1" X1="80"
Y1="70" X2="80" Y2="20" /><Line Stroke="Blue"
StrokeThickness="1" X1="90.5"
Y1="95.5" X2="90.5" Y2="45.5" />
這個或許有點麻煩,那么更簡單的就是:
3.1px line issue in silverlight
直接設置Line的RenderTransform
<Line.RenderTransform>
<TranslateTransform X="0.5" Y="0.5"/>
</Line.RenderTransform>
但是這個也不是一勞永逸的,實際運用中發現當把線條的厚度設成2個像素時卻變得模糊了。
暫時只能在后臺代碼中這么做了:
line.RenderTransform = StrokeThickness % 2 == 0 ? null : new TranslateTransform() { X = 0.5, Y = 0.5 };
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載