拖动C1LinearGauge中的指针

C1Gauge(Silverligth和WPF)通过一个指针来显示一个范围内的值,在某些场景我们希望通过拖动指针来修改C1Gauge的值,从而实现类型Silder控件的功能。我们可以通过鼠标事件,并根据鼠标所在的位置来改变C1Gauge的值。现在最关键的一步就是得到鼠标的位置

发布于 2012/11/15 00:00

C1Gauge(Silverligth和WPF)通过一个指针来显示一个范围内的值,在某些场景我们希望通过拖动指针来修改C1Gauge的值,从而实现类型Silder控件的功能。
我们可以通过鼠标事件,并根据鼠标所在的位置来改变C1Gauge的值。现在最关键的一步就是得到鼠标的位置。遗憾的是C1Gauge并没有内置的方法来返回鼠标的位置,只能自己计算得到,下面的代码就演示了通过位置计算出相应的值:
 
var pathlength = linearGauge.ActualWidth * linearGauge.XAxisLength;
var startposition = linearGauge.ActualWidth * linearGauge.XAxisLocation;
var offset = Convert.ToDouble((linearGauge.Maximum - linearGauge.Minimum) / pathlength);
var pixelvalue = Convert.ToDouble(offset * startposition);
linearGauge.Value = Convert.ToDouble((e.GetPosition(linearGauge).X * offset) - pixelvalue + linearGauge.Minimum);
复制代码
下面代码演示了如何在鼠标事件中来动态计算该值:
 
linearGauge.MouseLeftButtonDown += (s, e) =>
{
    bdr = e.OriginalSource as Border;  //global varaible
    isMouseCaptured = true;
    bdr.Cursor = Cursors.Hand;
    bdr.CaptureMouse();
};

linearGauge.MouseMove += (s, e) =>
{
    if (isMouseCaptured)
    {
       var pathlength = linearGauge.ActualWidth * linearGauge.XAxisLength;
       var startposition = linearGauge.ActualWidth * linearGauge.XAxisLocation;
       var offset = Convert.ToDouble((linearGauge.Maximum - linearGauge.Minimum) / pathlength);
       var pixelvalue = Convert.ToDouble(offset * startposition);
       linearGauge.Value = Convert.ToDouble((e.GetPosition(linearGauge).X * offset) - pixelvalue + linearGauge.Minimum);
       if (linearGauge.Value < linearGauge.Minimum)
          linearGauge.Value = linearGauge.Minimum;
       else if (linearGauge.Value > linearGauge.Maximum)
          linearGauge.Value = linearGauge.Maximum;
    }
};

linearGauge.MouseLeftButtonUp += (s, e) =>
{
    if (bdr != null)
    {
       bdr.ReleaseMouseCapture();
       bdr.Cursor = Cursors.Arrow;
       isMouseCaptured = false;
    }
};
复制代码
附上源码:
VS2010 + C1Gauge for WPF 2011V3(适用于C1Gauge for Silverlight 2011V3)
[attach]2138[/attach]
 

zip(2012-3-12 9:30:46 上传)

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的开发者社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态