热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> Silverlight>>正文内容

教你如何用Silverlight做一个仪表盘

发布时间:2010年08月28日点击数: 佚名

使用Silverlight做一个仪表盘控件,最好是借助Expression blend来实现。先看看这个控件的效果:

 

首先需要创建一个自定义控件:

 

它需要继承方法:OnApplyTemplate()。代码如下:

  1. public override void OnApplyTemplate() 
  2.     { 
  3.       base.OnApplyTemplate(); 
  4.   
  5.       Grid root = GetTemplateChild("LayoutRoot"as Grid; 
  6.       root.DataContext = this
  7.     } 

我们创建了一个可视化的控件Grid,并把当前这个控件GaugeControl作为Grid的DataContext。
接下来需要完成的是自定义几个依赖属性:
显示的值(Value),最大值(Maximum)和最小值(Minimum),以及不同的量度区间(QualitativeRanges)。

例如,Value的代码:

  1. public double Value 
  2.     { 
  3.       get { return (double)GetValue(ValueProperty); } 
  4.       set { SetValue(ValueProperty, value); } 
  5.     } 
  6.   
  7.     DependencyProperty ValueProperty = DependencyProperty.Register("Value"typeof(double), 
  8.       typeof(GaugeControl), new PropertyMetadata(50.0, OnValuePropertyChanged)); 
  9.   
  10.     private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
  11.     { 
  12.       ((GaugeControl)d).OnPropertyChanged("Value"); 
  13.     } 

接下来需要做的是创建一个Rsource文件,添加一个Style并给它设置一个名字为LayoutRoot的控件模板。

 

接下来是我们来用Expression Blend来打开项目,编辑这个控件模板。

首先是添加一个Grid,并在这个Grid中添加一个圆:

 

通过Fill和Stroke来设置圆的显示:

 

在圆中添加一个ItemControl,因为我们要使用数据绑定来给显示小的标记点,所以需要一个ViewModel来为这些标记点提供数据绑定:

 

例如:

 

  1. <ItemsControl ItemsSource="{Binding MinorTicks}" 
  2.  
  3.                             VerticalAlignment="Center" HorizontalAlignment="Center"> 
  4.  
  5.                 <ItemsControl.ItemsPanel> 
  6.  
  7.                   <ItemsPanelTemplate> 
  8.  
  9.                     <Canvas/> 
  10.  
  11.                   </ItemsPanelTemplate> 
  12.  
  13.                 </ItemsControl.ItemsPanel> 
  14.  
  15.                 <ItemsControl.ItemTemplate> 
  16.  
  17.                   <DataTemplate> 
  18.  
  19.                     <Ellipse Fill="Black" Width="3" Height="3"> 
  20.  
  21.                       <Ellipse.RenderTransform> 
  22.  
  23.                         <TransformGroup> 
  24.  
  25.                           <TranslateTransform X="-1.5" Y="-1.5"/> 
  26.  
  27.                           <TranslateTransform X="0" 
  28.  
  29.                                               Y="{Binding Parent.GridHeight, ConverterParameter=-0.37, Converter={StaticResource ScaleFactorConverter}}"/> 
  30.  
  31.                           <RotateTransform Angle="{Binding Angle}"/> 
  32.  
  33.                         </TransformGroup> 
  34.  
  35.                       </Ellipse.RenderTransform> 
  36.  
  37.                     </Ellipse> 
  38.  
  39.                   </DataTemplate> 
  40.  
  41.                 </ItemsControl.ItemTemplate> 
  42.  
  43.               </ItemsControl> 

需要绑定的就是MinorTicks.它都有ViewModel提供值。

 

同理可以绑定大的标记点:

 

接下来就是指针的创建:

首先需要创建一个Grid:

然后使用Path元素来创建一个菱形并未它加上效果:

可以看这个例子学习使用path来画图:http://www.c-sharpcorner.com/UploadFile/mahesh/PathInSL03252009005946AM/PathInSL.aspx

 

最后一步是添加阴影效果显得更酷:

 

完成啦。

对于数据转换还是需要一些转换函数,比如,颜色转化为Brush:

 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作