添加项目文件。
This commit is contained in:
54
Commands/ClosingWindowBehavior.cs
Normal file
54
Commands/ClosingWindowBehavior.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Interactivity;
|
||||
namespace YwxApp.AiChat.Commands
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Close Window Behavior
|
||||
/// </summary>
|
||||
public class ClosingWindowBehavior : Behavior<Window>
|
||||
{
|
||||
public static readonly DependencyProperty CommandProperty =
|
||||
DependencyProperty.Register("Command", typeof(ICommand), typeof(ClosingWindowBehavior), new PropertyMetadata(null));
|
||||
|
||||
public static readonly DependencyProperty CommandParameterProperty =
|
||||
DependencyProperty.Register("CommandParameter", typeof(object), typeof(ClosingWindowBehavior), new PropertyMetadata(null));
|
||||
|
||||
public ICommand Command
|
||||
{
|
||||
get { return (ICommand)GetValue(CommandProperty); }
|
||||
set { SetValue(CommandProperty, value); }
|
||||
}
|
||||
|
||||
public object CommandParameter
|
||||
{
|
||||
get { return GetValue(CommandParameterProperty); }
|
||||
set { SetValue(CommandParameterProperty, value); }
|
||||
}
|
||||
|
||||
protected override void OnAttached()
|
||||
{
|
||||
base.OnAttached();
|
||||
AssociatedObject.Closing += OnClosing;
|
||||
}
|
||||
|
||||
protected override void OnDetaching()
|
||||
{
|
||||
base.OnDetaching();
|
||||
AssociatedObject.Closing -= OnClosing;
|
||||
}
|
||||
|
||||
private void OnClosing(object sender, CancelEventArgs e)
|
||||
{
|
||||
if (Command != null && Command.CanExecute(CommandParameter))
|
||||
{
|
||||
Command.Execute(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
29
Commands/EventsCommand.cs
Normal file
29
Commands/EventsCommand.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace YwxApp.AiChat.Commands
|
||||
{
|
||||
|
||||
public class EventsCommand<T> : ICommand
|
||||
{
|
||||
private readonly Action<T> _execute;
|
||||
private readonly Func<T, bool> _canExecute;
|
||||
public EventsCommand(Action<T> execute, Func<T, bool> canExecute = null)
|
||||
{
|
||||
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
|
||||
_canExecute = canExecute;
|
||||
}
|
||||
public bool CanExecute(object parameter)
|
||||
{
|
||||
return _canExecute?.Invoke((T)parameter) ?? true;
|
||||
}
|
||||
public void Execute(object parameter)
|
||||
{
|
||||
_execute((T)parameter);
|
||||
}
|
||||
public event EventHandler CanExecuteChanged
|
||||
{
|
||||
add { CommandManager.RequerySuggested += value; }
|
||||
remove { CommandManager.RequerySuggested -= value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
29
Commands/ObjectPassingCommand.cs
Normal file
29
Commands/ObjectPassingCommand.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace YwxApp.AiChat.Commands
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// object parameter passing.
|
||||
/// </summary>
|
||||
public class ObjectPassingCommand : ICommand
|
||||
{
|
||||
public Action<object> execute;
|
||||
public ObjectPassingCommand(Action<object> execute)
|
||||
{
|
||||
this.execute = execute;
|
||||
}
|
||||
public event EventHandler? CanExecuteChanged;
|
||||
|
||||
public bool CanExecute(object? parameter)
|
||||
{
|
||||
return CanExecuteChanged != null;
|
||||
}
|
||||
|
||||
public void Execute(object? parameter)
|
||||
{
|
||||
execute?.Invoke(parameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
29
Commands/ParameterlessCommand.cs
Normal file
29
Commands/ParameterlessCommand.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace YwxApp.AiChat.Commands
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// relay command
|
||||
/// </summary>
|
||||
public class ParameterlessCommand : ICommand
|
||||
{
|
||||
private Action _execute;
|
||||
public ParameterlessCommand(Action execute)
|
||||
{
|
||||
_execute = execute;
|
||||
}
|
||||
public event EventHandler? CanExecuteChanged;
|
||||
|
||||
public bool CanExecute(object? parameter)
|
||||
{
|
||||
return CanExecuteChanged != null;
|
||||
}
|
||||
|
||||
public void Execute(object? parameter)
|
||||
{
|
||||
_execute.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
37
Commands/ScrollViewerCommand.cs
Normal file
37
Commands/ScrollViewerCommand.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace YwxApp.AiChat.Commands
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Scroll command : The argument object passed by this constructor of this class is ScrollViewer
|
||||
/// </summary>
|
||||
class ScrollViewerCommand : ICommand
|
||||
{
|
||||
private readonly Action<object> _execute;
|
||||
private readonly Predicate<object> _canExecute;
|
||||
|
||||
public ScrollViewerCommand(Action<object> execute, Predicate<object> canExecute = null)
|
||||
{
|
||||
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
|
||||
_canExecute = canExecute;
|
||||
}
|
||||
|
||||
public bool CanExecute(object parameter)
|
||||
{
|
||||
return _canExecute == null || _canExecute(parameter);
|
||||
}
|
||||
|
||||
public void Execute(object parameter)
|
||||
{
|
||||
_execute(parameter);
|
||||
}
|
||||
|
||||
public event EventHandler CanExecuteChanged
|
||||
{
|
||||
add { CommandManager.RequerySuggested += value; }
|
||||
remove { CommandManager.RequerySuggested -= value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user