示例:WPF中应用MarkupExtention自定义ICommand

一、目的:应用MarkupExtention定义ICommand,使得应用起来更简单和高效


二、实现

    public abstract class MarkupCommandBase : MarkupExtension, ICommand
    {
        public virtual bool CanExecute(object parameter)
        {
            return true;
        }

        public abstract void Execute(object parameter);

        public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

三、环境


VS2022

四、示例

自定义一个应用Process.Start路径的Command

public class ProcessCommand : MarkupCommandBase
{
    public string Uri { get; set; }

    public override bool CanExecute(object parameter)
    {
        string uri = parameter?.ToString() ?? this.Uri;
        if (string.IsNullOrEmpty(uri))
            return false;
        bool result = File.Exists(uri) || Directory.Exists(uri);
        if (parameter.ToString().ToUpper().StartsWith("http") == true) 
            return true;
        return result;
    }

    public override void Execute(object parameter)
    {
        string uri = parameter?.ToString() ?? this.Uri;
        Process.Start(new ProcessStartInfo(uri) { UseShellExecute = true });

    }
}

定义一个按钮调用该命令

<Button Content="打开D盘" 
        Style="{DynamicResource {x:Static h:ButtonKeys.Default}}" 
        Command="{h:ProcessCommand}" CommandParameter="D:\"/>

输出结果

点击按钮后显示D盘资源管理器 

五、需要了解的知识点

ICommand 接口 (System.Windows.Input) | Microsoft Learn

MarkupExtension 类 (System.Windows.Markup) | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值