gpt4 book ai didi

wpf - WPF命令,如何声明应用程序级别的命令?

转载 作者:行者123 更新时间:2023-12-03 14:32:01 25 4
gpt4 key购买 nike

我对创建可在WPF应用程序中任何位置使用的命令感兴趣。

我希望它们以与CutCopyPaste和其他应用程序级别命令相同的方式工作,即:

<Button Command="Paste" />

我以为可以为Application实例设置CommandBindings,但是该属性不可用。

怎么做?

到目前为止,我管理的最好的事情是在顶层窗口上创建一组命令,然后像这样访问它们:
<Button Command="{x:Static namespace::MainWindow.CommandName}" />

哪个可行,但是当然紧密耦合,因此非常脆弱。

最佳答案

您可以为WPF应用程序的“所有Windows”设置CommandBindings,并在Application类中实现命令处理程序。

首先,创建一个静态命令容器类。例如,

namespace WpfApplication1 
{
public static class MyCommands
{
private static readonly RoutedUICommand doSomethingCommand = new RoutedUICommand("description", "DoSomethingCommand", typeof(MyCommands));

public static RoutedUICommand DoSomethingCommand
{
get
{
return doSomethingCommand;
}
}
}
}

接下来,将自定义命令设置为Button.Command,如下所示。
<Window x:Class="WpfApplication1.MainWindow"
...
xmlns:local="clr-namespace:WpfApplication1">
<Grid>
...
<Button Command="local:MyCommands.DoSomethingCommand">Execute</Button>
</Grid>
</Window>

最后,在Application类中实现自定义命令的命令处理程序。
namespace WpfApplication1 
{

public partial class App : Application
{
public App()
{
var binding = new CommandBinding(MyCommands.DoSomethingCommand, DoSomething, CanDoSomething);

// Register CommandBinding for all windows.
CommandManager.RegisterClassCommandBinding(typeof(Window), binding);
}

private void DoSomething(object sender, ExecutedRoutedEventArgs e)
{
...
}

private void CanDoSomething(object sender, CanExecuteRoutedEventArgs e)
{
...
e.CanExecute = true;
}
}
}

关于wpf - WPF命令,如何声明应用程序级别的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com