在KeyUp的XAML中调用自定义控件的函数

时间:2019-12-18 12:11:02

标签: c# wpf xaml

我有一个自AutoCompleteBoxEx扩展的自定义AutoCompleteBox控件。在xaml中,它的定义如下:

<customControlsPtw:AutoCompleteBoxEx x:Name="PART_TextBox"
                   Grid.Row="0"
                   Grid.Column="0"
                   Padding="2,2,22,2"
                   HorizontalContentAlignment="Stretch"
                   VerticalContentAlignment="Top"
                   IsTextCompletionEnabled="False" 
                   KeyUp="AutoCompleteBox_KeyUp"
                   MouseLeftButtonUp="AutoCompleteBox_MouseLeftButtonUp"
                   ItemsSource="{TemplateBinding ItemsSource}"
                   Text="{Binding Text,
                              RelativeSource={RelativeSource TemplatedParent},
                              Mode=TwoWay,
                              UpdateSourceTrigger=PropertyChanged}"
                   TextWrapping="{TemplateBinding TextWrapping}">

重要的部分是KeyUpMouseLeftButtonUp,我要分别为其运行功能AutoCompleteBox_KeyUpAutoCompleteBox_MouseLeftButtonUp。通常,这些可以在后面的代码中定义,但是我想避免这样做,并且如果我可以在自定义控件本身中包含这些函数,则希望这样做。

我有在xaml中定义的自定义控件的上下文:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:customControls="clr-namespace:ptw.UI.CustomControls">

因此我可能会做类似customControls:AutoCompleteBoxEx.AutoCompleteBox_KeyUp的操作,但似乎找不到它(无法解析符号)。

我仍然习惯于WPF,所以我想知道是否有一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

  

...并且希望我可以在自定义控件本身中使用这些功能

如果要在“自定义控件本身”中定义事件处理程序,则可以使用AutoCompleteBoxEx语法将它们连接到+=类的构造函数中:

public AutoCompleteBoxEx()
{
    this.KeyUp += AutoCompleteBox_KeyUp;
    this.MouseLeftButtonUp += AutoCompleteBox_MouseLeftButtonUp;
}

然后默认情况下,它们将在AutoCompleteBoxEx的每个实例中出现。