feat: deal with virtualization.

This commit is contained in:
rabbitism
2024-03-25 11:10:11 +08:00
parent b15d237056
commit e600937fd7
3 changed files with 228 additions and 41 deletions

View File

@@ -1,11 +1,28 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Mixins;
using Avalonia.Input;
using Irihi.Avalonia.Shared.Helpers;
namespace Ursa.Controls;
public class MultiComboBoxItem: ListBoxItem
public class MultiComboBoxItem: ContentControl
{
public static readonly StyledProperty<bool> IsSelectedProperty = AvaloniaProperty.Register<MultiComboBoxItem, bool>(
nameof(IsSelected));
public bool IsSelected
{
get => GetValue(IsSelectedProperty);
set => SetValue(IsSelectedProperty, value);
}
static MultiComboBoxItem()
{
IsSelectedProperty.AffectsPseudoClass<MultiComboBoxItem>(":selected");
PressedMixin.Attach<MultiComboBoxItem>();
FocusableProperty.OverrideDefaultValue<MultiComboBoxItem>(true);
}
public MultiComboBoxItem()
{
this.GetObservable(IsFocusedProperty).Subscribe(a=> {
@@ -15,4 +32,18 @@ public class MultiComboBoxItem: ListBoxItem
}
});
}
protected override void OnPointerPressed(PointerPressedEventArgs e)
{
base.OnPointerPressed(e);
if (e.Handled)
{
return;
}
if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
{
this.IsSelected = !this.IsSelected;
e.Handled = true;
}
}
}