找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证

超级版主

300

主题

7876

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13140

活字格认证圣诞拼拼乐微信认证勋章讲师达人元老葡萄悬赏达人

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-3-12 09:29  /   查看:6407  /  回复:0
C1Gauge(Silverligth和WPF)通过一个指针来显示一个范围内的值,在某些场景我们希望通过拖动指针来修改C1Gauge的值,从而实现类型Silder控件的功能。
我们可以通过鼠标事件,并根据鼠标所在的位置来改变C1Gauge的值。现在最关键的一步就是得到鼠标的位置。遗憾的是C1Gauge并没有内置的方法来返回鼠标的位置,只能自己计算得到,下面的代码就演示了通过位置计算出相应的值:

  1. var pathlength = linearGauge.ActualWidth * linearGauge.XAxisLength;
  2. var startposition = linearGauge.ActualWidth * linearGauge.XAxisLocation;
  3. var offset = Convert.ToDouble((linearGauge.Maximum - linearGauge.Minimum) / pathlength);
  4. var pixelvalue = Convert.ToDouble(offset * startposition);
  5. linearGauge.Value = Convert.ToDouble((e.GetPosition(linearGauge).X * offset) - pixelvalue + linearGauge.Minimum);
复制代码
下面代码演示了如何在鼠标事件中来动态计算该值:
  1. linearGauge.MouseLeftButtonDown += (s, e) =>
  2. {
  3.     bdr = e.OriginalSource as Border;  //global varaible
  4.     isMouseCaptured = true;
  5.     bdr.Cursor = Cursors.Hand;
  6.     bdr.CaptureMouse();
  7. };

  8. linearGauge.MouseMove += (s, e) =>
  9. {
  10.     if (isMouseCaptured)
  11.     {
  12.        var pathlength = linearGauge.ActualWidth * linearGauge.XAxisLength;
  13.        var startposition = linearGauge.ActualWidth * linearGauge.XAxisLocation;
  14.        var offset = Convert.ToDouble((linearGauge.Maximum - linearGauge.Minimum) / pathlength);
  15.        var pixelvalue = Convert.ToDouble(offset * startposition);
  16.        linearGauge.Value = Convert.ToDouble((e.GetPosition(linearGauge).X * offset) - pixelvalue + linearGauge.Minimum);
  17.        if (linearGauge.Value < linearGauge.Minimum)
  18.           linearGauge.Value = linearGauge.Minimum;
  19.        else if (linearGauge.Value > linearGauge.Maximum)
  20.           linearGauge.Value = linearGauge.Maximum;
  21.     }
  22. };

  23. linearGauge.MouseLeftButtonUp += (s, e) =>
  24. {
  25.     if (bdr != null)
  26.     {
  27.        bdr.ReleaseMouseCapture();
  28.        bdr.Cursor = Cursors.Arrow;
  29.        isMouseCaptured = false;
  30.     }
  31. };
复制代码
附上源码:
VS2010 + C1Gauge for WPF 2011V3(适用于C1Gauge for Silverlight 2011V3)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部