Skip to content

Commit 0200ded

Browse files
Change bring into view event listener to class handler
This is to avoid a potential handler leak
1 parent a604ccf commit 0200ded

1 file changed

Lines changed: 15 additions & 11 deletions

File tree

src/MaterialDesignThemes.Wpf/Internal/PaddedBringIntoViewStackPanel.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-

1+
22
using MaterialDesignThemes.Wpf.Behaviors.Internal;
33

44
namespace MaterialDesignThemes.Wpf.Internal;
@@ -34,27 +34,31 @@ public bool UseHeaderPadding
3434
public static readonly DependencyProperty UseHeaderPaddingProperty =
3535
DependencyProperty.Register(nameof(UseHeaderPadding), typeof(bool), typeof(PaddedBringIntoViewStackPanel), new PropertyMetadata(false));
3636

37-
public PaddedBringIntoViewStackPanel()
38-
=> AddHandler(FrameworkElement.RequestBringIntoViewEvent, new RoutedEventHandler(OnRequestBringIntoView), false);
37+
static PaddedBringIntoViewStackPanel()
38+
=> EventManager.RegisterClassHandler(typeof(PaddedBringIntoViewStackPanel),
39+
FrameworkElement.RequestBringIntoViewEvent,
40+
new RequestBringIntoViewEventHandler(OnRequestBringIntoView));
3941

40-
private void OnRequestBringIntoView(object sender, RoutedEventArgs e)
42+
private static void OnRequestBringIntoView(object sender, RoutedEventArgs e)
4143
{
42-
if (!UseHeaderPadding)
44+
var panel = (PaddedBringIntoViewStackPanel)sender;
45+
if (!panel.UseHeaderPadding)
4346
return;
4447

45-
if (e.OriginalSource is FrameworkElement child && child != this)
48+
if (e.OriginalSource is FrameworkElement child && child != panel)
4649
{
4750
e.Handled = true;
4851

4952
// TODO: Consider making the "ScrollDirection" a destructive read (i.e. reset the value once it is read) to avoid leaving a Backward/Forward value that may be misinterpreted at a later stage.
50-
double offset = ScrollDirection switch {
51-
TabScrollDirection.Backward => -HeaderPadding,
52-
TabScrollDirection.Forward => HeaderPadding,
53+
double offset = panel.ScrollDirection switch
54+
{
55+
TabScrollDirection.Backward => -panel.HeaderPadding,
56+
TabScrollDirection.Forward => panel.HeaderPadding,
5357
_ => 0
5458
};
55-
var point = child.TranslatePoint(new Point(), this);
59+
var point = child.TranslatePoint(new Point(), panel);
5660
var newTargetRect = new Rect(new Point(point.X + offset, point.Y), child.RenderSize);
57-
BringIntoView(newTargetRect);
61+
panel.BringIntoView(newTargetRect);
5862
}
5963
}
6064
}

0 commit comments

Comments
 (0)