我正在尝试从MainWindow.xaml.cs调用MainWindow.xaml中的方法。 我在任何地方都找不到这将如何工作。
例如,假设我的 xaml 代码中有 KeyBinding,我希望在按下 CTRL+E 时调用MethodIWantToCall
。
<Page x:Class="Example"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Example"
mc:Ignorable="d">
<Page.InputBindings>
<KeyBinding Command="{Binding MethodIWantToCall}" Gesture="Ctrl+E"/>
</Page.InputBindings>
</Page>
public partial class Example : Page
{
public Example()
{
InitializeComponent();
}
public void MethodIWantToCall()
{
//Body
}
}
当然,当我运行代码并按 Ctrl+E 时,什么都不会发生。 如果我将该方法放在其他类中,它将起作用,但在我的情况下,我需要它是 xaml 后面的这个页面。
命令不仅仅是方法,它们实际上是类。具体来说,它们是实现ICommand
接口的任何类的实例。"command"类有一个实际执行操作的Execute
方法,以及一个可选CanExecute
来确定命令当前是否能够执行。
下面是有关命令的 WPF 文档:命令概述。
这主要侧重于RelayCommand
,它是命令的 WPF 实现,其功能类似于RoutedEvent
s。另一种方法是使用"RelayCommand"(又名"DelegateCommand")。RelayCommand 实际上不是任何标准 .NET 库的一部分,但它是一个简单的常用类。你可以在这个答案中找到它的暗示。
这里有一个问题,讨论何时/为什么可以使用RoutedCommand
而不是RelayCommand
反之亦然:WPF ICommand vs RoutedCommand。我个人在不同时间都使用过这两种方法。
总结一下:您需要在Example
中定义一个自定义命令,该命令在执行时将调用MethodIWantToCall
。实施将有所不同,具体取决于您是选择使用RelayCommand
还是RoutedCommand
。