【问题标题】:WPF combining MouseDown and TouchDown to same eventWPF 将 MouseDown 和 TouchDown 组合到同一个事件
【发布时间】:2014-01-28 07:35:28
【问题描述】:

我正在开发一个将在带有触摸屏的笔记本电脑上使用的应用程序。因此 MouseDown 事件本质上是在做同样的动作,应该怎么做呢。

我写的代码是这样的 -

XAML

<Button MouseDown="Button_OnMouseDown" TouchDown="Button_OnTouchDown"/>

C#

private void Button_OnMouseDown(object sender, MouseButtonEventArgs e)
{
    Action();
}
private void Button_OnTouchDown(object sender, TouchEventArgs e)
{
    Action();
}
private void Action()

有没有更好的方法来做到这一点?感谢您提供任何反馈。

【问题讨论】:

    标签: c# wpf touch mouseevent


    【解决方案1】:

    使 eventArgs 更通用。使用EventArgs 代替MouseEventArgsTouchEventArgs

    private void Button_OnMouseDownOrTouchDown(object sender, EventArgs e)
    {
        Action();
    }
    

    现在您可以从 XAML 挂钩到相同的事件:

    <Button MouseDown="Button_OnMouseDownOrTouchDown" 
            TouchDown="Button_OnMouseDownOrTouchDown"/>
    

    这称为委托逆变。阅读有关here 的更多信息。

    委托可以与具有以下类型参数的方法一起使用 是委托签名参数类型的基本类型。和 逆变,您可以使用一个事件处理程序而不是单独的 处理程序。例如,您可以创建一个接受 EventArgs 输入参数并将其与 Button.MouseClick 事件一起使用 将 MouseEventArgs 类型作为参数发送,并且还带有 发送 KeyEventArgs 参数的 TextBox.KeyDown 事件。

    【讨论】:

    • 我收到一个更清晰的警告 - Incorrect method signature 使用 EventArgs 而不是 TouchEventArgs 用于 TouchDown 事件处理程序。 MouseDown 很好。没什么大不了的,但想听听您的建议
    • 我个人从不依赖 Re-Sharper。 (如果你在网上搜索,你会发现大量关于 re-sharper 显示代码中完美场景的警告的帖子。)我不知道它会显示 TouchEventArgs 的警告,但不会显示 MouseEventArgs 的警告。
    • 感谢 Rohit 澄清
    • 看来这不起作用(不再起作用?至少 .Net 4.5)- WPF 抛出 XAMLParseException,表示它无法绑定到目标方法,因为它的签名与委托不兼容类型。
    • 不,它肯定也适用于 4.5。从未从任何 .Net 框架中删除反方差。还尝试了小样本,对我来说效果很好。请针对您的样本提出单独的问题,以便更好地了解问题。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多