巧用Silverlight之Path

开发web项目的人都知道,影响网页性能的一个主要因素就是加载大容量的图片和视频,当客户机发送请求时,我们需要把可能涉及到的内容,都解析后下载在客户端进行呈现。Silverlight也一样呀,作为web的富客户端版减小客户端大小,快速下载并加载是实现一个优质站点的基础,那么在Silverlight中,我们能否在这方面做些优化呢?答案是肯定的,那体验Path一把吧。

在项目开发中,同事说这个界面你画一个不就成了,这是有道理,在图片可以解决的时候,意味这客户端需要下载图片,一个图片怎么说也得几k的大小。下边我们就看一个具体的例子。在呈现试题时常常会有ABCD选项,传统的ABCD一个单选按钮,这样似乎界面丑陋了些,于是想自定义一个体现单选按钮的图片。我们是试着用Path画一下。

理解Path的过程,并不复杂,SL中的Path就是一个自定义点绘制的过程,在Path.Data中完成对应内容,其下有EllipseGeometry、LineGeometry 和 RectangleGeometry这三种简单类型,如绘制负责的弧线和曲线使用PathGeometry,其它更复杂的几何图形则使用 GeometryGroup。由于  GeometryGroup 本身是一个 Geometry,所以,您可以指定单个几何图形或多个几何图形指定。此处我们就使用EllipseGeometry即可,绘制一个圆圈。

代码如下:

  
    
< Path Fill = " Orange " Stroke = " Black " StrokeThickness = " 1 " >
< Path.Data >
< EllipseGeometry Center = " 54,58 " RadiusX = " 10 " RadiusY = " 10 " />
</ Path.Data >
</ Path >

在如上的代码中,我们通过EllipseGeometry指定圆心为54、58绘制半径为10的一个小圆圈,同时用橘黄色填充背景,用黑色绘制边线。

效果图如下:

ok,接下来我们就是要搞一个A,B,C类似的到圆圈中,怎么来了,绘制A,B吗?这是一个复杂的 过程,能否有其它方法,想起了Canvas,这是个奇妙的家伙,它的位置很零散,指定它到那他就放在那,于是乎来了感觉,试一下如下的代码,添加TextBlock吧,放置A,然后Canvas调制位置,显示想要的效果,代码如下:

  
    
< StackPanel >
< Canvas >
< Path Fill = " Orange " Stroke = " Black " StrokeThickness = " 1 " >
< Path.Data >
< EllipseGeometry Center = " 54,58 " RadiusX = " 10 " RadiusY = " 10 " />
</ Path.Data >
</ Path >
</ Canvas >
< TextBlock Text = " A " Margin = " 50,50,0,0 " ></ TextBlock >
</ StackPanel >

好了上边的代码,大家能看明白的,在StackPanel这个容器中,放置对应的一个Canvas和TextBlock,我调好了对应的坐标和显示位置,这个过程大家可以自由根据显示情况进行调控。

经过这么一想,应该是期望的记过把,运行后呈现结果如下:

运行效果完全符合预期,还算可以,如果把这个东西做成控件,A这个东西动态传递,效果就很不错了,完成了想要的工作,突然想起同事说,点击后画个背景的效果,不妨多说一些非Path的

那就需要在StackPanel上添加个事件就行,对添加MouseLeftDown事件,对应的回台处理如下:

  
    
private void StackPanel_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
{
StackPanel mainObj
= sender as StackPanel;
Path tempObj
= (mainObj.Children[ 0 ] as Canvas).Children[ 0 ] as Path;
tempObj.Fill
= new SolidColorBrush(Colors.Blue);
(mainObj.Children[
1 ] as TextBlock).Foreground = new SolidColorBrush(Colors.White);
}

上边的代码,通过获取对象改变几个颜色而已,代码简单,不过多书名,但你点击A圆圈后,应该为选中状态的颜色这样才能和非选中状态进行区别,经如上代码后,效果就出来了。

这就是选中一个按钮后的状态了,好了,到此完成了想要的功能,批量封装后就是一个控件了。此处对Path紧紧简单的讲解,Path太强大了,告诉我们能这样处理的就这样处理,减少多少

张图片呀,如果用图片如果4个选项,选中和非选中2种状态,共8张图片,估计占用多少流量下载到客户机器上。

望大家 对Path多做研究,通过此例子Path不容忽视哦。

你可能感兴趣的:(silverlight)