none
WPF 如何在触摸Touch事件里模拟双击 RRS feed

答案

  • 你好 !

    我是这样写的

            int selectIndex = 0;
            private void ListViewContent_TouchDown(object sender, TouchEventArgs e)
            {
                //MessageBox.Show("Time:  " + e.Timestamp);
                ListBox ls = sender as ListBox;
                selectIndex = ls.SelectedIndex;
                Device lsItem = ls.SelectedItem as Device;
                if (lsItem == null) return;
                    //1、实例化弹出窗
                    DevDetaillControl ddc = new DevDetaillControl(lsItem);
                    ddc.Closed += new EventHandler(ddc_Closed);
                    ddc.ShowDialog();
            }

            void ddc_Closed(object sender, EventArgs e)
            {
                this.ListViewContent.SelectedIndex = selectIndex;
            }

    这样是可以,关闭弹出窗体的时候能将ListViewContent 的Item选中,但是ListViewContent这个控件就是无法获取焦点,我再次点击的时候才能获取。

    • 已标记为答案 weiss_2009 2014年8月12日 2:49
    • 取消答案标记 weiss_2009 2014年8月12日 2:49
    • 已标记为答案 weiss_2009 2014年8月12日 2:49
    2014年8月11日 8:23

全部回复

  • 你好。

    可以在ListBox的Item模板容器添加MouseDown事件,假定名字为item_MouseDown。

    然后添加事件处理代码:

    private void item_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Left && e.ClickCount == 2)
        {
            // 添加双击处理程序
        }
    }


    希望我的答案能帮助更多的人。

    2014年8月11日 6:11
  • 你好!不是MouseDown事件  我要的是触摸事件
    2014年8月11日 6:23
  • 你好。

    Touch事件可以这样处理:

    首先为控件添加TouchDown事件,然后进行处理

    int lastTouchTimestamp = 0;
    private void Grid_TouchDown(object sender, TouchEventArgs e)
    {
        if (e.Timestamp - lastTouchTimestamp < 300)
        {
            // 添加双击处理程序
            lastTouchTimestamp = 0;
        }
        else
        {
            lastTouchTimestamp = e.Timestamp;
        }
    }
    上面代码中,我们设定两次点击间隔为0.3秒内,就认定为双击。你也可以根据你测试的效果进行调整。


    希望我的答案能帮助更多的人。 博客:http://shaomeng.cnblogs.com/


    2014年8月11日 6:40
  • 我试试谢谢了
    2014年8月11日 6:57
  • 我还有个问题问问,就是我的主界面上有个ListBox双击Item的时候弹出窗体,关闭弹出的窗体后,咋样继续让主界面的ListBox获取焦点
    2014年8月11日 7:34
  • 如果关闭子窗体后默认ListBox没有获取焦点的话,可以这样:

    1. 在子窗体弹出前记录当前ListBox的SelectedItem或者SelectedIndex。

    2. 在子窗体关闭后,设置ListBox的的SelectedItem或者SelectedIndex。


    希望我的答案能帮助更多的人。 博客:http://shaomeng.cnblogs.com/

    2014年8月11日 7:57
  • 你好 !

    我是这样写的

            int selectIndex = 0;
            private void ListViewContent_TouchDown(object sender, TouchEventArgs e)
            {
                //MessageBox.Show("Time:  " + e.Timestamp);
                ListBox ls = sender as ListBox;
                selectIndex = ls.SelectedIndex;
                Device lsItem = ls.SelectedItem as Device;
                if (lsItem == null) return;
                    //1、实例化弹出窗
                    DevDetaillControl ddc = new DevDetaillControl(lsItem);
                    ddc.Closed += new EventHandler(ddc_Closed);
                    ddc.ShowDialog();
            }

            void ddc_Closed(object sender, EventArgs e)
            {
                this.ListViewContent.SelectedIndex = selectIndex;
            }

    这样是可以,关闭弹出窗体的时候能将ListViewContent 的Item选中,但是ListViewContent这个控件就是无法获取焦点,我再次点击的时候才能获取。

    • 已标记为答案 weiss_2009 2014年8月12日 2:49
    • 取消答案标记 weiss_2009 2014年8月12日 2:49
    • 已标记为答案 weiss_2009 2014年8月12日 2:49
    2014年8月11日 8:23
  • 你可以在ddc_Closed方法中断点监视一下,看看SelectedIndex是不是被正确设置了。

    另外对于ListBox,点击的选中和代码设置的选中,视觉效果是不一样的。点击选中更明显,代码选中只是会有一个很浅的边缘颜色。


    希望我的答案能帮助更多的人。 博客:http://shaomeng.cnblogs.com/

    2014年8月11日 8:30
  • 你好! 我确定是选择对的 我设置选中背景不一样,为了看效果,我是这样设置的
    this.ListViewContent.SelectedIndex = selectIndex-1;
    确定是选中了,但ListViewContent没有获取焦点。我需要点击一下ListViewContent才多去焦点
    2014年8月11日 9:32
  • 是的,就如我前面说的。点击选中和代码设置选中的效果是不一样的。

    可以通过设置ListBox的Focus来实现。在设置选中内容前,先设置ListBox的Focus。

    void ddc_Closed(object sender, EventArgs e)
    {
        this.ListViewContent.Focus();
        this.ListViewContent.SelectedIndex = selectIndex;
    }


    希望我的答案能帮助更多的人。 博客:http://shaomeng.cnblogs.com/

    2014年8月11日 9:39
  • 你好!我这样也试过了,还是不能获取焦点,只要弹出窗口后,关闭弹出窗口就没有焦点了。
    2014年8月12日 1:58
  • 你好。

    你单步调试一下ddc_Closed方法,看看这里的selectIndex是不是-1呢?如果是-1,那看起来就是没有焦点的。为了方便排查问题,可以暂时先把selectIndex设为一个固定值。


    希望我的答案能帮助更多的人。


    2014年8月12日 2:04
  • 你好!我这样也试过了,还是不能获取焦点,只要弹出窗口后,关闭弹出窗口就没有焦点了。

    你好,

    因为您的原问题已经解决,为了论坛更好地讨论,建议您开新帖,谢谢理解:)


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年8月12日 2:17
    版主
  • 我看了,不是-1.我设置成固定的了,可以看到Select了 就是没焦点
    2014年8月12日 2:20
  • 你好。

    我这边做的简单的Demo,通过Button的点击弹出一个ChildWindow,在Closed事件中设置ListBox的Focus和SelectedIndex。运行效果是可以获取焦点的。

    你可以参照这个思路,把多余的代码先注释掉,便于核查问题。如果问题还是不能解决,可以像Franklin Chen所说的,新开一个问题,详细描述一下问题,并尽量把代码都贴出来。

    咱们这个问题是模拟Touch双击,这个问题已经解决了,谢谢你的支持。


    希望我的答案能帮助更多的人。

    2014年8月12日 2:38