Mesen2/UI/Controls/EnumRadioButton.cs
2023-01-25 16:03:56 -05:00

61 lines
1.5 KiB
C#

using Avalonia;
using Avalonia.Controls;
using System;
using System.Linq;
using Avalonia.Styling;
using Avalonia.Data;
using Avalonia.Interactivity;
using Mesen.Localization;
namespace Mesen.Controls
{
public class EnumRadioButton : RadioButton, IStyleable
{
Type IStyleable.StyleKey => typeof(RadioButton);
public static readonly StyledProperty<Enum> ValueProperty = AvaloniaProperty.Register<EnumRadioButton, Enum>(nameof(Value), defaultBindingMode: BindingMode.TwoWay);
public static readonly StyledProperty<Enum> CheckedWhenProperty = AvaloniaProperty.Register<EnumRadioButton, Enum>(nameof(CheckedWhen));
public Enum Value
{
get { return GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public Enum CheckedWhen
{
get { return GetValue(CheckedWhenProperty); }
set { SetValue(CheckedWhenProperty, value); }
}
static EnumRadioButton()
{
ValueProperty.Changed.AddClassHandler<EnumRadioButton>((x, e) => {
x.IsChecked = x.Value?.Equals(x.CheckedWhen) == true;
});
CheckedWhenProperty.Changed.AddClassHandler<EnumRadioButton>((x, e) => {
x.IsChecked = x.Value?.Equals(x.CheckedWhen) == true;
});
}
public EnumRadioButton()
{
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
IsChecked = Value.Equals(CheckedWhen);
if(Content == null) {
Content = ResourceHelper.GetEnumText(CheckedWhen);
}
}
protected override void OnChecked(RoutedEventArgs e)
{
base.OnChecked(e);
Value = CheckedWhen;
}
}
}