forked from Mirror/Ryujinx
52 lines
1.7 KiB
C#
52 lines
1.7 KiB
C#
|
using Avalonia;
|
||
|
using Avalonia.Controls;
|
||
|
using Avalonia.Input;
|
||
|
using System;
|
||
|
using System.Windows.Input;
|
||
|
|
||
|
namespace Ryujinx.Ava.Ui.Controls
|
||
|
{
|
||
|
public class HotKeyControl : ContentControl, ICommandSource
|
||
|
{
|
||
|
public static readonly StyledProperty<object> CommandParameterProperty =
|
||
|
AvaloniaProperty.Register<HotKeyControl, object>(nameof(CommandParameter));
|
||
|
|
||
|
public static readonly DirectProperty<HotKeyControl, ICommand> CommandProperty =
|
||
|
AvaloniaProperty.RegisterDirect<HotKeyControl, ICommand>(nameof(Command),
|
||
|
control => control.Command, (control, command) => control.Command = command, enableDataValidation: true);
|
||
|
|
||
|
public static readonly StyledProperty<KeyGesture> HotKeyProperty = HotKeyManager.HotKeyProperty.AddOwner<Button>();
|
||
|
|
||
|
private ICommand _command;
|
||
|
private bool _commandCanExecute;
|
||
|
|
||
|
public ICommand Command
|
||
|
{
|
||
|
get { return _command; }
|
||
|
set { SetAndRaise(CommandProperty, ref _command, value); }
|
||
|
}
|
||
|
|
||
|
public KeyGesture HotKey
|
||
|
{
|
||
|
get { return GetValue(HotKeyProperty); }
|
||
|
set { SetValue(HotKeyProperty, value); }
|
||
|
}
|
||
|
|
||
|
public object CommandParameter
|
||
|
{
|
||
|
get { return GetValue(CommandParameterProperty); }
|
||
|
set { SetValue(CommandParameterProperty, value); }
|
||
|
}
|
||
|
|
||
|
public void CanExecuteChanged(object sender, EventArgs e)
|
||
|
{
|
||
|
var canExecute = Command == null || Command.CanExecute(CommandParameter);
|
||
|
|
||
|
if (canExecute != _commandCanExecute)
|
||
|
{
|
||
|
_commandCanExecute = canExecute;
|
||
|
UpdateIsEffectivelyEnabled();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|