"I'm developing a custom user control and need to manage the behavior of its parent UI element based on the triggers inside this control. Currently, I use an event handler property within the custom control. Alternatively, I've tried passing the parent UI element as a dependency property to the custom control itself. Both methods work, but I'm unsure about the best practice. Any advice on which approach is recommended?"
Approach 1:
public class CustomControl : UserControl
{
public event PointerEventHandler PointerWheelChanged;
// Method to trigger the event
protected void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
PointerWheelChanged?.Invoke(this, e);
}
}
ParentPage.xaml:
<ScrollViewer x:Name="DetailsScrollViewer">
<CustomControl PointerWheelChanged="OnPointerWheelChangedEvent"/>
</ScrollViewer>
ParentPage.cs file:
protected void OnPointerWheelChangedEvent(object sender, PointerRoutedEventArgs e)
{
Microsoft.UI.Input.PointerPoint point = e.GetCurrentPoint(DetailsScrollViewer);
DetailsScrollViewer.ScrollToVerticalOffset(DetailsScrollViewer.VerticalOffset - point.Properties.MouseWheelDelta);
}
Approach 2:
public class CustomControl : UserControl
{
// Dependency property to hold reference to ScrollViewer
public ScrollViewer ScrollViewer
{
get { return (ScrollViewer)GetValue(ScrollViewerProperty); }
set { SetValue(ScrollViewerProperty, value); }
}
public static readonly DependencyProperty ScrollViewerProperty =
DependencyProperty.Register("ScrollViewer", typeof(ScrollViewer), typeof(CustomControl), new PropertyMetadata(null));
// Method to handle the event
protected void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
Microsoft.UI.Input.PointerPoint point = e.GetCurrentPoint(ScrollViewer);
ScrollViewer.ScrollToVerticalOffset(ScrollViewer.VerticalOffset - point.Properties.MouseWheelDelta);
}
}
ParentPage.xaml:
<ScrollViewer x:Name="DetailsScrollViewer">
<CustomControl ScrollViewer="DetailsScrollViewer"/>
</ScrollViewer>