美国银行卡Payoneer注册奖励25美元
posts - 85,  comments - 1230,  views - 104万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

 

 

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

 

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

1
2
3
4
5
6
7
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

posted on   Nic Pei  阅读(4477)  评论(5编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示