silverlight-Canvas中1像素的线变成了2像素

之前自己写了个控件,中间有关于线形样式的设置,包括线宽。一开始就发现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 };

好了,问题都解决了,虽然感觉上不是那么完美。

你可能感兴趣的:(silverlight)