Advertisement
Guest User

OxyPlot clicking bug

a guest
Sep 27th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ===== MainPage.xaml =====
  2.  
  3. <UserControl x:Class="SilverlightApplication3.MainPage"
  4. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  5. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. xmlns:oxy="clr-namespace:OxyPlot.Silverlight;assembly=OxyPlot.Silverlight"
  9. mc:Ignorable="d"
  10. d:DesignHeight="300" d:DesignWidth="400">
  11.  
  12. <Grid x:Name="LayoutRoot" Background="White">
  13. <oxy:Plot x:Name="FFTplotter"/>
  14. </Grid>
  15. </UserControl>
  16.  
  17. ===== MainPage.xaml.cs =====
  18.  
  19. using System;
  20. using OxyPlot;
  21. using System.Collections.ObjectModel;
  22. using System.Collections.Specialized;
  23. using System.ComponentModel;
  24. using System.Windows.Controls;
  25. using System.Collections.Generic;
  26.  
  27. namespace SilverlightApplication3
  28. {
  29. public partial class MainPage : UserControl, INotifyPropertyChanged
  30. {
  31. public MainPage()
  32. {
  33. InitializeComponent();
  34. FFTplotter.Model = new PlotModel();
  35. SetPlotData();
  36.  
  37. SelectedValues = new ObservableCollection<int>();
  38.  
  39. FFTplotter.Model.MouseDown += MouseDown;
  40. FFTplotter.Model.MouseUp += MouseUp;
  41. FFTplotter.Model.MouseMove += MouseMoved;
  42. }
  43.  
  44. private void SetPlotData()
  45. {
  46. // Set the type of lineseries and the kind of visualization
  47. var ls = new LineSeries();
  48.  
  49. var ps = new List<DataPoint>();
  50. Random random = new Random();
  51. var min = 0;
  52. var max = 100;
  53.  
  54. for (int x = 0; x < 1000; x++)
  55. {
  56. var dataPoint = 1;
  57. ps.Add(new DataPoint(x, random.Next(min, max)));
  58. }
  59.  
  60. ls.ItemsSource = ps;
  61.  
  62. FFTplotter.Model.Series.Clear();
  63. FFTplotter.Model.Series.Add(ls);
  64. FFTplotter.Model.InvalidatePlot(true);
  65. }
  66.  
  67. private ObservableCollection<int> _selectedFrequencies;
  68. public ObservableCollection<int> SelectedValues
  69. {
  70. get { return _selectedFrequencies; }
  71. set
  72. {
  73. if (value == null) return;
  74. _selectedFrequencies = value;
  75. NotifyPropertyChanged("SelectedFrequencies");
  76. }
  77. }
  78.  
  79. private bool _mousedown;
  80. private void MouseDown(object sender, OxyMouseEventArgs e)
  81. {
  82. _mousedown = true;
  83. e.Handled = true;
  84. }
  85.  
  86. private void MouseUp(object sender, OxyMouseEventArgs e)
  87. {
  88. _mousedown = false;
  89. RenderSelectedValue();
  90. e.Handled = true;
  91. }
  92.  
  93. private void MouseMoved(object sender, OxyMouseEventArgs e)
  94. {
  95. if (_mousedown)
  96. {
  97. RenderSelectedValue();
  98. e.Handled = true;
  99. }
  100. }
  101.  
  102. private ObservableCollection<Annotation> _selectedFrequencylines;
  103. private static bool RenderingLines;
  104. private void RenderSelectedValue()
  105. {
  106. if (!RenderingLines)
  107. {
  108. RenderingLines = true;
  109.  
  110. if (_selectedFrequencylines == null) _selectedFrequencylines = new ObservableCollection<Annotation>();
  111.  
  112. _selectedFrequencylines.Add(new LineAnnotation
  113. {
  114. Type = LineAnnotationType.Vertical,
  115. X = 500,
  116. Color = OxyColors.Gray,
  117. LineStyle = LineStyle.Solid,
  118. });
  119.  
  120. // And plot all the added lines!
  121. foreach (var a in _selectedFrequencylines)
  122. {
  123. // TODO: here silverlight crashes if you quicly click (with lmb) at two different locations in the plot.
  124. FFTplotter.Model.Annotations.Add(a);
  125. }
  126. FFTplotter.Model.InvalidatePlot(false);
  127.  
  128. RenderingLines = false;
  129. }
  130. else
  131. {
  132. }
  133. }
  134.  
  135. #region INotifyPropertyChanged Members
  136.  
  137. public event PropertyChangedEventHandler PropertyChanged;
  138.  
  139. /// <summary>
  140. /// Generic NotifyPropertyChanged function
  141. /// </summary>
  142. /// <param name="propertyname"> Name of the property that has changed </param>
  143. private void NotifyPropertyChanged(string propertyname)
  144. {
  145. if (PropertyChanged != null)
  146. {
  147. PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
  148. }
  149. }
  150. #endregion
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement