public TrendPresenter(TrendPen trendPen) { _trendPen = trendPen; TrendTag = trendPen.TrendTag; LineThickness = trendPen.Thickness; LineBrush = trendPen.Brush; _queryTimer.Elapsed += QueryTimerElapsed; Loaded += TrendPresenterLoaded; Unloaded += TrendPresenterUnloaded; }
public SliderPresenter(TrendPen pen) { InitializeComponent(); DataContext = pen; }
private void AddPen(TrendPen trendPen) { var trendTagBinding = BindingOperations.GetBinding(trendPen, TrendPen.TrendTagProperty); if (trendTagBinding != null && trendTagBinding.Source == null && trendTagBinding.RelativeSource == null && trendTagBinding.ElementName == null) { BindingOperations.ClearBinding(trendPen, TrendPen.TrendTagProperty); trendTagBinding = new Binding(trendTagBinding.Path.Path) {Source = DataContext}; BindingOperations.SetBinding(trendPen, TrendPen.TrendTagProperty, trendTagBinding); } var trendPresenter = new TrendPresenter(trendPen) { MaxPoints = _maxPoints }; var showPointsBinding = new Binding("ShowPoints") { Source = this }; trendPresenter.SetBinding(TrendPresenter.ShowPointsProperty, showPointsBinding); _trendPresenters.Add(trendPen, trendPresenter); _gTrendPresenters.Children.Add(trendPresenter); _trendPens.Add(trendPen); #region Slider var sliderPresenter = new SliderPresenter(trendPen); _sliderPresenters.Add(trendPen, sliderPresenter); sliderPresenter.SizeChanged += SliderPresenterSizeChanged; sliderPresenter.LayoutUpdated += SliderPresenterLayoutUpdated; _spSlider.Children.Add(sliderPresenter); var sliderPresenterVisibilityBinding = new Binding("Visible") { Source = trendPen, Converter = new BooleanToVisibilityConverter() }; sliderPresenter.SetBinding(VisibilityProperty, sliderPresenterVisibilityBinding); var sliderLine = new Line(); _sliderLines.Add(trendPen, sliderLine); sliderLine.Stroke = _sliderLinesBrush; sliderLine.StrokeThickness = _sliderLinesThickness; var cursorCoordinateBinding = new Binding("CursorCoordinate") { Source = trendPresenter }; sliderLine.SetBinding(Line.Y1Property, cursorCoordinateBinding); var sliderLineVisibilityBinding = new MultiBinding {Converter = new SliderLineVisibilityConverter()}; sliderLineVisibilityBinding.Bindings.Add(new Binding("Visible") { Source = trendPen }); sliderLineVisibilityBinding.Bindings.Add(new Binding("CursorCoordinate") { Source = trendPresenter }); sliderLine.SetBinding(VisibilityProperty, sliderLineVisibilityBinding); UpdateSliderLine(sliderLine, trendPen); _cSlider.Children.Add(sliderLine); #endregion }
private void UpdateSliderLine(Line line, TrendPen trendPen) { if (!_sliderPresenters.ContainsKey(trendPen)) return; var sliderPresenter = _sliderPresenters[trendPen]; var transform = sliderPresenter.TransformToVisual(_cSlider); var position = transform.Transform(new Point(0, 0)); line.Y2 = position.Y + sliderPresenter.ActualHeight/2; if (position.X < 0) { line.X2 = position.X + sliderPresenter.ActualWidth; } else { line.X2 = position.X; } }
private void RemovePen(TrendPen trendPen) { var trendPresenter = _trendPresenters[trendPen]; BindingOperations.ClearBinding(trendPresenter, TrendPresenter.ShowPointsProperty); _trendPresenters.Remove(trendPen); _gTrendPresenters.Children.Remove(trendPresenter); _trendPens.Remove(trendPen); #region Slider var sliderPresenter = _sliderPresenters[trendPen]; _sliderPresenters.Remove(trendPen); sliderPresenter.SizeChanged -= SliderPresenterSizeChanged; sliderPresenter.LayoutUpdated -= SliderPresenterLayoutUpdated; _spSlider.Children.Remove(sliderPresenter); BindingOperations.ClearBinding(sliderPresenter, VisibilityProperty); var sliderLine = _sliderLines[trendPen]; _sliderLines.Remove(trendPen); BindingOperations.ClearBinding(sliderLine, Line.Y1Property); BindingOperations.ClearBinding(sliderLine, VisibilityProperty); _cSlider.Children.Remove(sliderLine); #endregion }
private void OnCurrentTrendPenChanged(TrendPen oldPen, TrendPen newPen) { if (oldPen != null) { if (_trendPens.Contains(oldPen)) { var presenter = _trendPresenters[oldPen]; _gTrendPresenters.Children.Remove(presenter); var index = _trendPens.IndexOf(oldPen); _gTrendPresenters.Children.Insert(index, presenter); } } if (newPen != null) { if (_trendPens.Contains(newPen)) { var presenter = _trendPresenters[newPen]; _gTrendPresenters.Children.Remove(presenter); _gTrendPresenters.Children.Insert(_gTrendPresenters.Children.Count, presenter); } } }