feat: add new event.
This commit is contained in:
@@ -189,6 +189,16 @@ public class NavMenu : ItemsControl, ICustomKeyboardNavigation
|
|||||||
add => AddHandler(SelectionChangedEvent, value);
|
add => AddHandler(SelectionChangedEvent, value);
|
||||||
remove => RemoveHandler(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)
|
protected override bool NeedsContainerOverride(object? item, int index, out object? recycleKey)
|
||||||
{
|
{
|
||||||
@@ -486,4 +496,22 @@ public class NavMenu : ItemsControl, ICustomKeyboardNavigation
|
|||||||
|
|
||||||
return null;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
24
src/Ursa/Controls/NavMenu/SelectionChangingEventArgs.cs
Normal file
24
src/Ursa/Controls/NavMenu/SelectionChangingEventArgs.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
|
||||||
|
namespace Ursa.Controls;
|
||||||
|
|
||||||
|
public class SelectionChangingEventArgs: RoutedEventArgs
|
||||||
|
{
|
||||||
|
/// <summary>Gets the items that were added to the selection.</summary>
|
||||||
|
public IList AddedItems { get; }
|
||||||
|
|
||||||
|
/// <summary>Gets the items that were removed from the selection.</summary>
|
||||||
|
public IList RemovedItems { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether the selection can be changed. If set to <c>false</c>, the selection will not change.
|
||||||
|
/// </summary>
|
||||||
|
public bool CanSelect { get; set; } = true;
|
||||||
|
|
||||||
|
public SelectionChangingEventArgs(RoutedEvent routedEvent, IList removedItems, IList addedItems): base(routedEvent)
|
||||||
|
{
|
||||||
|
RemovedItems = removedItems;
|
||||||
|
AddedItems = addedItems;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user