将TouchMove事件映射为MouseMove事件在WPF中

3

我正在WPF应用程序中实现一个简单的拖放功能。我希望该应用程序能够在没有触摸支持的桌面和只有触摸支持的平板电脑上运行。

目前我有一个MouseMove和TouchMove处理程序,它们都实现了相同的逻辑(启动DoDragDrop())。

如何将触摸输入路由到鼠标处理程序或反之,以减少重复代码?进一步地,如何将简单的轻触路由到点击事件?

1个回答

4
我刚刚进行了快速测试,一种实现方式是创建全局事件处理程序。
由于 TouchEventArgsMouseButtonEventArgs 派生自 InputEventArgs,因此您的全局处理程序将只实现 InputEventArgs
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        //private void Button_TouchMove(object sender, TouchEventArgs e)
        //{
            // TouchEventArgs derives from InputEventArgs
        //}

        // private void Button_MouseMove(object sender, MouseButtonEventArgs e)
        //{
            // MouseButtonEventArgs derives from InputEventArgs
        //}

        private void GlobalHandler(object sender, InputEventArgs e)
        {
            // This will fire for both TouchEventArgs and MouseButtonEventArgs

            // If you need specific information from the event args you can just cast.
            // e.g. var args = e as MouseButtonEventArgs;
        }

    }

Xaml:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid >
        <Button MouseMove="GlobalHandler" TouchMove="GlobalHandler"/>
    </Grid>
</Window>

希望这可以帮到你。

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