【问题标题】:how to override built in event handler in WPF c#如何覆盖 WPF c# 中的内置事件处理程序
【发布时间】:2015-02-04 15:50:15
【问题描述】:

在我的项目中,我想覆盖 WPF 中构建的 Touchup 事件处理程序。我不知道如何覆盖此事件处理程序以供我自己使用。那可能吗?有人可以举一些例子,我没有得到一些参考或例子。

【问题讨论】:

  • 您要覆盖哪个事件?
  • 如Touchup、TouchDown
  • 你试过这样的事情吗? stackoverflow.com/questions/5774849/…
  • @user2137886 你能解释一下你的意思是什么覆盖这个事件处理程序供我自己使用
  • @ChaseErnst 我认为这是不同的。它应该涉及自定义 evenArgs。

标签: c# wpf eventhandler


【解决方案1】:

您可以创建自定义控件并覆盖事件。请参考我为 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);
    }
}

【讨论】:

    【解决方案2】:

    有可能。

    假设您要覆盖this TouchUp event(完全覆盖它)。您将需要定义一个新函数来处理此问题。类似的东西:

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

    (可能不是TouchEventArgs,我没试过,但看起来是这样)

    然后,在您的 xaml 中,在您的对象定义中,您需要向目标对象指定它应该使用此函数。如果它是一个组合框(例如),你会有这样的东西:

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

    瞧!您的对象将使用您的新功能。

    现在,假设您只想更改一点点当前事件,那么您可以覆盖将在事件发生时调用的the OnTouchUp function。应该这样做:

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

    但是,同一个类的每个元素的行为都是一样的。所以当你想定义一个新的自定义类时这真的很有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多