如何使用带参数的函数作为事件处理程序?
Posted
技术标签:
【中文标题】如何使用带参数的函数作为事件处理程序?【英文标题】:How to use functions with parameters as event handlers? 【发布时间】:2013-06-04 18:44:13 【问题描述】:我正在使用 Blend(我对它非常陌生)来创建 XAML。我有一行代码调用下面的函数writeC
:
<Button x:Name="key_c" Content="c" HorizontalAlignment="Left" Height="60"
Margin="243,188.667,0,0" VerticalAlignment="Top" Width="60" FontWeight="Bold"
FontFamily="Century Gothic" FontSize="21.333" Foreground="Black"
Click="writeC">
这很好用。但是,我想将其更改为调用带有参数"a"
和"A"
的函数WriteChar
,以便它调用以下C# 函数:
private void writeChar(string myCharCaps, string myCharLower)
如何在 XAML 中编写此代码?
【问题讨论】:
【参考方案1】:您的点击处理程序需要遵守事件处理程序签名。如果您想让该处理程序成为您的 WriteChar 的简单包装器,那很好。更多信息在这里:http://msdn.microsoft.com/en-us/library/bb531289(v=vs.90).aspx
【讨论】:
好吧,我还是不太明白。我阅读了说明,但我仍然有点迷茫。抱歉...我对 XAML 和 C# 很陌生。 不确定如何帮助您。如果您对编写函数本身感到困惑,您可以在 XAML 中执行此操作,但在代码隐藏文件(如 C# 或 VB.NET)中实现逻辑要容易得多。 获得正确签名的最简单方法是在 xaml 编辑器中,键入“Click=",它应该会像“新事件处理程序”一样弹出自动完成,然后按 Enter。它会给它一个名字,并在代码文件中创建具有正确签名的方法。 嗯...这个过程似乎不会自动完成。我必须安装某些东西或启用某些东西吗?【参考方案2】:您可以使用命令和命令参数来代替事件处理程序:
视图模型:
public ICommand MyCommand get; private set;
// ViewModel constructor
public ViewModel()
// Instead of object, you can choose the parameter type you want to pass.
MyCommand = new DelegateCommand<object>(MyCommandHandler);
public void MyCommandHandler(object parameter)
// Do stuff with parameter
XAML:
<Button Command="Binding MyCommand" CommandParameter="..." />
您可以在 WPF here 中阅读有关命令的更多信息。
当然,如果您希望按钮始终执行具有相同参数的代码,那么从按钮传递参数没有任何意义,这些参数可以硬编码到处理程序中:
<Button Click="Button_Click" />
private void Button_Click(object sender, EventArgs e)
WriteChar("a", "A");
【讨论】:
以上是关于如何使用带参数的函数作为事件处理程序?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery:如何在事件处理函数中获取事件对象而不将其作为参数传递?