如何在WPF c#中覆盖内置事件处理程序

4
在我的项目中,我想重写WPF内置的Touchup事件处理程序。我不知道如何为自己的使用重写此事件处理程序。这是否可能?有人可以提供一些示例吗?我没有找到相关的参考或示例。

你想要覆盖哪个事件? - Chase Ernst
如Touchup、TouchDown。 - user2137886
你尝试过类似这样的东西吗?https://dev59.com/52025IYBdhLWcg3w1JeG - Chase Ernst
1
@user2137886,您能解释一下“覆盖此事件处理程序以供自己使用”是什么意思吗? - dkozl
@ChaseErnst 我认为这是不同的,它应该涉及自定义事件参数。 - user2137886
显示剩余2条评论
2个回答

3

您可以创建自定义控件并覆盖事件。参考我为TextBox控件尝试的以下代码。

class TextBoxEx : TextBox
{
    protected override void OnTouchUp(System.Windows.Input.TouchEventArgs e)
    {
        base.OnTouchUp(e);
    }

    protected override void OnTouchDown(System.Windows.Input.TouchEventArgs e)
    {
       base.OnTouchDown(e);
    }
}

0

这是可能的。

假设你想要完全覆盖这个TouchUp事件。你需要定义一个新的函数来处理它。类似于:

private void Custom_TouchUp(object sender, TouchEventArgs e)
        {
            // Do some stuff there          
        }

(可能不是TouchEventArgs,我还没有尝试过,但看起来像是它)

然后,在你的XAML中,你需要在对象定义中指定目标对象应该使用这个函数。如果是一个组合框(例如),你会有类似下面的代码:

<Combobox [...] TouchUp=Custom_TouchUp>
    <Eventual parameters>
</Combobox>

完成!您的对象将使用您的新函数。

现在,假设您只想微调当前事件,那么您可以重写OnTouchUp函数,该函数将在事件发生时被调用。像这样的代码应该可以:

public override void OnTouchUp()
        {
            base.OnTouchUp();
            // Other stuffs
        }

但是,同一类别的每个元素都会执行相同的操作。因此,当您想要定义新的自定义类时,这非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接