wpf-折线图绘制2-oxyplot-4-修饰图像(不重绘)

之前写过一篇,用的是oxyplot的annotation实现的:

https://blog.csdn.net/pxy7896/article/details/120490130

这篇不用annotation,也不用刷新图像,所以响应速度更快,且可以自定义提示
效果是一致的


前台

首先在绘图区放一个Canvas。

<Grid>
...
	<oxy:PlotView x:Name="myPlot" Model="{Binding Path= SimplePlotModel}" Grid.Row="0">
	...
	</oxy:PlotView>
	<Canvas x:Name="canvas1" Grid.Row="0"/>
	...
</Grid>

后台

// 定义几个类的私有变量
// rect就是点击时显示的bar
private System.Windows.Shapes.Rectangle rect; 
// 存放对象。比如我就放了两个textblock
private DockPanel peakToolTip;
private TextBlock peakText1;
private TextBlock peakText2;

// 在构造函数里初始化一下
this.rect = new System.Windows.Shapes.Rectangle {
    
     Fill = new 					
	SolidColorBrush(System.Windows.Media.Color.FromArgb(XXX)) };
// 加到canvas1里
canvas1.Children.Add(this.rect);
peakToolTip = new DockPanel();
peakText1 = new TextBlock() {
    
     Name = "peakText1" };
peakText2 = new TextBlock() {
    
     Name = "peakText2" };
peakToolTip.Children.Add(peakText1);
peakToolTip.Children.Add(peakText2);
canvas1.Children.Add(peakToolTip);

// 事件处理函数
// 绑定方法看之前写的那篇
private void SimplePlotModel_MouseDown(object sender, OxyMouseDownEventArgs e)
{
    
    
    // e.Position.X 和 e.Position.Y是点击处的位置
    var position = OxyPlot.Axes.Axis.InverseTransform(e.Position, myPlot.Model.DefaultXAxis, myPlot.Model.DefaultYAxis);
    // 这个是与x轴对应的位置
    var x = Math.Round(position.X);
	....
	// 设置bar的宽度和高度
    this.rect.Width = 10;
    this.rect.Height = 800;
	// 设置bar的位置
    Canvas.SetLeft(this.rect, e.Position.X);
    Canvas.SetTop(this.rect, 20);
	// 设置peakText1和peakText2相关的
    this.peakText1.Text = ...
	// 设置tooltip的位置
    Canvas.SetLeft(this.peakToolTip, e.Position.X);
    Canvas.SetTop(this.peakToolTip, e.Position.Y + 50);
	// 设置裁剪区域
    var plotArea = new Rect(myPlot.Model.PlotArea.Left,
        myPlot.Model.PlotArea.Top,
        myPlot.Model.PlotArea.Width,
        myPlot.Model.PlotArea.Height);
	// 裁剪后剩下plotArea,所以在这里出现的东西就会显示在绘图区了
    canvas1.Clip = new RectangleGeometry(plotArea);
}

猜你喜欢

转载自blog.csdn.net/pxy7896/article/details/120847591
今日推荐