private void OnScrollChanged(object sender, ScrollChangedEventArgs e) { CharacterWidthsCanvasScroll.ScrollChanged -= OnScrollChanged; IndicesToCharacterCanvasScroll.ScrollChanged -= OnScrollChanged; CharactersToIndexCanvasScroll.ScrollChanged -= OnScrollChanged; if (!CharacterWidthsCanvasScroll.Equals(sender)) { CharacterWidthsCanvasScroll.ScrollToVerticalOffset(e.VerticalOffset); CharacterWidthsCanvasScroll.ScrollToHorizontalOffset(e.HorizontalOffset); } if (!IndicesToCharacterCanvasScroll.Equals(sender)) { IndicesToCharacterCanvasScroll.ScrollToVerticalOffset(e.VerticalOffset); IndicesToCharacterCanvasScroll.ScrollToHorizontalOffset(e.HorizontalOffset); } if (!CharactersToIndexCanvasScroll.Equals(sender)) { CharactersToIndexCanvasScroll.ScrollToVerticalOffset(e.VerticalOffset); CharactersToIndexCanvasScroll.ScrollToHorizontalOffset(e.HorizontalOffset); } CharacterWidthsCanvasScroll.ScrollChanged += OnScrollChanged; IndicesToCharacterCanvasScroll.ScrollChanged += OnScrollChanged; CharactersToIndexCanvasScroll.ScrollChanged += OnScrollChanged; }
private void OnGLControlElementMouseClick(object sender, MouseEventArgs e) { int index = ((e.Y / 24) * 21 + (e.X / 24)); if (index < _charactersWidths.Length) { UIElement control = CharacterWidthsCanvas.Children[index * 2 + 1]; double kx = Canvas.GetLeft(control) / CharacterWidthsCanvas.Width; double ky = Canvas.GetTop(control) / CharacterWidthsCanvas.Height; double x = ((CharacterWidthsCanvasScroll.ScrollableWidth + CharacterWidthsCanvasScroll.ViewportWidth) * kx) - CharacterWidthsCanvasScroll.ViewportWidth / 2; double y = ((CharacterWidthsCanvasScroll.ScrollableHeight + CharacterWidthsCanvasScroll.ViewportHeight) * ky) - CharacterWidthsCanvasScroll.ViewportHeight / 2; CharacterWidthsCanvasScroll.ScrollToHorizontalOffset(x); CharacterWidthsCanvasScroll.ScrollToVerticalOffset(y); CharacterWidthsCanvas.Children[index * 2 + 1].Focus(); } }