彩票走势图

silverlight-Canvas线形样式的设置

转帖|其它|编辑:郝浩|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@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP