组合框上 KeyDown 的签名

Posted

技术标签:

【中文标题】组合框上 KeyDown 的签名【英文标题】:Signature for KeyDown on a ComboBox 【发布时间】:2019-05-03 15:23:56 【问题描述】:

我在 Visual Studio 2015 中有一个带有 Blend Extensions 的 WPF 桌面应用程序。我想在ComboBox 中为KeyDown 事件添加EventTrigger,但是当我按下一个键(ESC)时出现以下错误:Could not find method named 'ComboBoxExitingStrategyKeyDown' on object of type 'ComboBox' that matches the expected signature.

我的 XMAL 看起来像这样:

<UserControl x:Class="MyserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:se="http://schemas.microsoft.com/expression/2010/interactions"
         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
<ComboBox x:Name="myComboBox" Grid.Row="9" Grid.Column="1" 
                    Style="StaticResource MasterComboBox"
                    ItemsSource="Binding Path=InternalSourceItems, Mode=OneWay"
                    SelectedItem="Binding Path=InternalItem, UpdateSourceTrigger=PropertyChanged"
                    Text="Binding Path=InternalItemSelectedValue, UpdateSourceTrigger=PropertyChanged"
                    SelectedValuePath="InternalValueItemDescription"
                    Margin="6,5,6,7">
              <i:Interaction.Triggers>
                <i:EventTrigger SourceObject="Binding ElementName=myComboBox" EventName="KeyDown">
                    <se:CallMethodAction MethodName="ComboBoxExitingStrategyKeyDown" 
                                         TargetObject="Binding ElementName=myComboBox"/>
                </i:EventTrigger>
              </i:Interaction.Triggers>

该方法具有以下签名:

public void ComboBoxExitingStrategyKeyDown(object sender, KeyEventArgs e)

   MessageBox.Show("Good");

我已经尝试了所有方法,受保护的、私有的、公共的,没有参数,只有一个,RoutedEventArgs 并且总是能收到消息。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

TargetObject 是包含该方法的对象。

目前你有它指向一个标准的ComboBox,它不包含该方法。

由于您的方法位于 MyserControl 后面的代码中,因此您应该将其指向它(通过添加一个名称,就像您对组合所做的那样)

【讨论】:

以上是关于组合框上 KeyDown 的签名的主要内容,如果未能解决你的问题,请参考以下文章

如何在访问中禁用组合框上的自动完成功能?

由于另一个组合框字符串值,如何更改组合框上的项目?

组合框上的参数值

拖放到可编辑的组合框上[重复]

如何在两个动态生成的组合框上使用不同的值

在组合框和列表框上为 ListFillRange 使用表格列