Vereinsmeisterschaften  22aa7800eae54b428d40e835886cefe1fdefdfdf
This is a software that can be used to manage the internal competition of the swimming club Illertissen called "Vereinsmeisterschaften".
Loading...
Searching...
No Matches
NestedScrollViewersBehavior.cs
3using System.Windows.Input;
4using System.Windows.Media;
5
7{
11 public static class NestedScrollViewersBehavior
12 {
13 public static readonly DependencyProperty DeferScrollingToParentWhenNeededProperty = DependencyProperty.RegisterAttached("DeferScrollingToParentWhenNeeded", typeof(bool), typeof(NestedScrollViewersBehavior), new PropertyMetadata(false, OnDeferScrollingToParentWhenNeededChanged));
14
15 public static void SetIsEnabled(DependencyObject element, bool value)
16 => element.SetValue(DeferScrollingToParentWhenNeededProperty, value);
17
18 public static bool GetIsEnabled(DependencyObject element)
19 => (bool)element.GetValue(DeferScrollingToParentWhenNeededProperty);
20
21 private static void OnDeferScrollingToParentWhenNeededChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
22 {
23 if (d is ScrollViewer scrollViewer)
24 {
25 if ((bool)e.NewValue)
26 {
27 scrollViewer.AddHandler(UIElement.PreviewMouseWheelEvent, new MouseWheelEventHandler(OnPreviewMouseWheel), true);
28 }
29 else
30 {
31 scrollViewer.RemoveHandler(UIElement.PreviewMouseWheelEvent, new MouseWheelEventHandler(OnPreviewMouseWheel));
32 }
33 }
34 }
35
40 private static void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
41 {
42 if (sender is ScrollViewer senderScrollViewer && !e.Handled &&
43 ((e.Delta < 0 && senderScrollViewer.VerticalOffset == senderScrollViewer.ScrollableHeight) // inner scroll viewer scrolled to the end
44 || (e.Delta > 0 && senderScrollViewer.VerticalOffset == 0))) // inner scroll viewer scrolled to the start
45 {
46 e.Handled = true;
47 MouseWheelEventArgs eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
48 eventArg.RoutedEvent = UIElement.MouseWheelEvent;
49 eventArg.Source = sender;
50 UIElement parent = ((Control)sender)?.Parent as UIElement;
51 parent?.RaiseEvent(eventArg);
52 }
53 }
54 }
55}