HandyControl
中通过查阅代码HandyControl_Shared
共享项目中,Interactivity/Commands
目录下,存在着一些内置 Command
,开心发现还有关闭窗体,最小化等系统级别常用命令。
CloseWindowCommand.cs
ControlCommands.cs
OpenLinkCommand.cs
PushMainWindow2TopCommand.cs
ScreenshotCommand.cs
ShutdownAppCommand.cs
StartScreenshotCommand.cs
其中主要是在ControlCommands.cs
中。由于是静态属性,所以可以直接在xaml
中使用,已关闭窗体为例。
/// <summary>
/// 控件库使用的所有命令(为了统一,不使用wpf自带的命令)
/// </summary>
public static class ControlCommands
{/// <summary>/// 关闭窗口/// </summary>public static CloseWindowCommand CloseWindow { get; } = new();
}
CloseWindowCommand
代码实现如下:
public class CloseWindowCommand : ICommand
{public bool CanExecute(object parameter) => true;public void Execute(object parameter){if (parameter is DependencyObject dependencyObject){if (Window.GetWindow(dependencyObject) is { } window){window.Close();}}}public event EventHandler CanExecuteChanged;
}
页面按钮使用:
<Button Style="{StaticResource CloseButtonIcon}" Command="{x:Static hc:ControlCommands.CloseWindow}" Padding="10,0" hc:IconElement.Geometry="{StaticResource CloseGeometry}"ToolTip="关闭">
运行项目之后,点击按钮并没有触发对应的命令。通过查阅Github
中的issue
可以查到如下信息:https://github.com/HandyOrg/HandyControl/issues/687
解决办法是添加对应的命令参数CommandParameter
。
<Button Style="{StaticResource CloseButtonIcon}" Command="{x:Static hc:ControlCommands.CloseWindow}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}" Padding="10,0" hc:IconElement.Geometry="{StaticResource CloseGeometry}"ToolTip="关闭">
其实熟悉命令的自定义基础实现方式,也能发现Excute(object paramer)
也是接受object
类型参数的。