feat: add new event.

This commit is contained in:
Dong Bin
2025-06-10 12:09:06 +08:00
parent eb20d8eaec
commit 0e83446cb6
2 changed files with 52 additions and 0 deletions

View File

@@ -189,6 +189,16 @@ public class NavMenu : ItemsControl, ICustomKeyboardNavigation
add => AddHandler(SelectionChangedEvent, value);
remove => RemoveHandler(SelectionChangedEvent, value);
}
public static readonly RoutedEvent<SelectionChangedEventArgs> SelectionChangingEvent =
RoutedEvent.Register<NavMenu, SelectionChangedEventArgs>(nameof(SelectionChanging), RoutingStrategies.Bubble);
public event EventHandler SelectionChanging
{
add => AddHandler(SelectionChangingEvent, value);
remove => RemoveHandler(SelectionChangingEvent, value);
}
protected override bool NeedsContainerOverride(object? item, int index, out object? recycleKey)
{
@@ -486,4 +496,22 @@ public class NavMenu : ItemsControl, ICustomKeyboardNavigation
return null;
}
internal bool CanChangeSelection(NavMenuItem item)
{
object? newSelection = null;
if (item.DataContext is not null && item.DataContext != DataContext)
newSelection = item.DataContext;
else
newSelection = item;
var args = new SelectionChangingEventArgs(
SelectionChangingEvent,
new[] { SelectedItem },
new[] { newSelection })
{
Source = this,
};
RaiseEvent(args);
return args.CanSelect;
}
}