feat: deal with selection.
This commit is contained in:
@@ -1,11 +1,33 @@
|
||||
using Avalonia.Controls;
|
||||
using System.Diagnostics;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Primitives;
|
||||
using Avalonia.Data;
|
||||
using Avalonia.LogicalTree;
|
||||
|
||||
namespace Ursa.Controls;
|
||||
|
||||
public class NavMenu: SelectingItemsControl
|
||||
public class NavMenu: ItemsControl
|
||||
{
|
||||
public static readonly StyledProperty<object?> SelectedItemProperty = AvaloniaProperty.Register<NavMenu, object?>(
|
||||
nameof(SelectedItem), defaultBindingMode: BindingMode.TwoWay);
|
||||
|
||||
public object? SelectedItem
|
||||
{
|
||||
get => GetValue(SelectedItemProperty);
|
||||
set => SetValue(SelectedItemProperty, value);
|
||||
}
|
||||
|
||||
static NavMenu()
|
||||
{
|
||||
SelectedItemProperty.Changed.AddClassHandler<NavMenu, object?>((o, e) => o.OnSelectedItemChange(e));
|
||||
}
|
||||
|
||||
private void OnSelectedItemChange(AvaloniaPropertyChangedEventArgs<object?> args)
|
||||
{
|
||||
Debug.WriteLine(args.NewValue.Value);
|
||||
}
|
||||
|
||||
protected override bool NeedsContainerOverride(object? item, int index, out object? recycleKey)
|
||||
{
|
||||
return NeedsContainer<NavMenuItem>(item, out recycleKey);
|
||||
@@ -27,6 +49,14 @@ public class NavMenu: SelectingItemsControl
|
||||
child.IsSelected = false;
|
||||
}
|
||||
}
|
||||
if (item.DataContext is not null && item.DataContext != this.DataContext)
|
||||
{
|
||||
SelectedItem = item.DataContext;
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedItem = item;
|
||||
}
|
||||
item.IsSelected = true;
|
||||
}
|
||||
}
|
||||
@@ -60,6 +60,7 @@ public class NavMenuItem: HeaderedSelectingItemsControl
|
||||
{
|
||||
base.OnAttachedToVisualTree(e);
|
||||
_rootMenu = GetRootMenu();
|
||||
UpdateSelection(1);
|
||||
}
|
||||
|
||||
protected override void OnPointerPressed(PointerPressedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user