文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>教你如何用Silverlight做一个仪表盘

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

时间:2010-08-24  来源:Nic Pei

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

 

 

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

 

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

public override void OnApplyTemplate()
    {
      base.OnApplyTemplate();
 
      Grid root = GetTemplateChild("LayoutRoot") as Grid;
      root.DataContext = this;
    }

 

我们创建了一个可视化的控件Grid,并把当前这个控件GaugeControl作为Grid的DataContext。

接下来需要完成的是自定义几个依赖属性:

显示的值(Value),最大值(Maximum)和最小值(Minimum),以及不同的量度区间(QualitativeRanges)。

 

例如,Value的代码:

public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}

DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double),
typeof(GaugeControl), new PropertyMetadata(50.0, OnValuePropertyChanged));

private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((GaugeControl)d).OnPropertyChanged("Value");
}

 

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

 

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

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

 

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

 

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

 

例如:

 

<ItemsControl ItemsSource="{Binding MinorTicks}"

VerticalAlignment
="Center" HorizontalAlignment="Center">

<ItemsControl.ItemsPanel>

<ItemsPanelTemplate>

<Canvas/>

</ItemsPanelTemplate>

</ItemsControl.ItemsPanel>

<ItemsControl.ItemTemplate>

<DataTemplate>

<Ellipse Fill="Black" Width="3" Height="3">

<Ellipse.RenderTransform>

<TransformGroup>

<TranslateTransform X="-1.5" Y="-1.5"/>

<TranslateTransform X="0"

Y
="{Binding Parent.GridHeight, ConverterParameter=-0.37, Converter={StaticResource ScaleFactorConverter}}"/>

<RotateTransform Angle="{Binding Angle}"/>

</TransformGroup>

</Ellipse.RenderTransform>

</Ellipse>

</DataTemplate>

</ItemsControl.ItemTemplate>

</ItemsControl>

 

 

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

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

 

接下来就是指针的创建:

首先需要创建一个Grid:

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

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

 

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

 

完成啦。

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

 

 

Cheers

Nic

相关阅读 更多 +
排行榜 更多 +
浴血混战官方下载

浴血混战官方下载

飞行射击 下载
检票员模拟器免广告下载

检票员模拟器免广告下载

模拟经营 下载
最终前哨最终版手机版下载

最终前哨最终版手机版下载

休闲益智 下载