private void MultilinePanelContent_OnSizeChanged(object sender, SizeChangedEventArgs e) { const double decreaseMultiplyer = 0.95; const double increaseMultiplyer = 1.05; var decreaseOffset = ActualFontSize * 1.0; var increaseOffset = ActualFontSize * 2.2; if (_lastContainerAdded) { if (MultilinePanelContent.ActualHeight > ScrollViewerContent.ActualHeight - decreaseOffset) { if (ActualFontSize > MinFontSize) { ActualFontSize *= decreaseMultiplyer; UpdateFontSize(); } else { ScrollViewerContent.ScrollToVerticalOffset(100000); } } } else { if (MultilinePanelContent.ActualHeight < ScrollViewerContent.ActualHeight - increaseOffset) { if (ActualFontSize < MaxFontSize) { ActualFontSize *= increaseMultiplyer; UpdateFontSize(); } } } }
private void ScrollViewerContent_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { // simply disable the WHOLE preview -> mosue wheel handling, as the WpfControls get disturbed e.Handled = true; // scroll ourselves ScrollViewerContent.ScrollToVerticalOffset(ScrollViewerContent.VerticalOffset - e.Delta); #if SAMPLE_CODE_EVENT_RAISE // simply disable mouse scroll for ScrollViewer, as it conflicts with the plots e.Handled = true; // if in inner loop, discard if (scrollInEventRaising) { return; } if (StackPanelCharts.Children != null) { foreach (var uc in StackPanelCharts.Children) { if (uc is ScottPlot.WpfPlot wpfPlot) { if (wpfPlot.IsMouseOver) { continue; } // wpfPlot.RaiseEvent(new RoutedEventArgs(UIElement.PreviewMouseWheelEvent, sender)); var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta); eventArg.RoutedEvent = UIElement.MouseWheelEvent; eventArg.Source = uc; // this seems to raise consecutive events .. somehow?? wpfPlot.RaiseEvent(eventArg); } } } #endif }