none
如何修改Win8 Metro里,在Drag ListView Item 时的背景图片 RRS feed

  • 问题

  • 在Metro Style开发ListView时,我要Drag ListView 的Item,再设置好DragDrop相关事件后,拖动的背景就是每一行Item的缩略图,能不能将这个缩略图改成自定义的图片。如同在桌面开发时,拖到一个不能拖放的区域,显示Stop的图片。

    2012年7月27日 1:42

答案

  • Canvas 才有Left Top Right Bottom 四个附加属性,用来定义一个元素在Canvas中的相对位置。 一般如果我们是用的Grid布局的话,那么Margin 外边距这个属性用来确定一个元素在Grid中的位置。

    所以你可能需要外面得有一个Canvas包裹,然后通过改变这四个属性来实现移动。 请检查下你的移动的时候外面是不是一个Grid ,如果是,换一下。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Lake_zheng 2012年8月2日 0:34
    2012年8月1日 8:01
    版主

全部回复

  • 不行,除非你不是通过Drag and Drop事件来实现,而是通过Pointer的相关事件,比如Pressed Released Moved 事件,然后自定义移动过程中的显示的内容,和自定义拖动后的插入和源数据删除的动作。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月27日 7:15
    版主
  • 多谢Bob, 如果通过Pointer处理,我怎么确定拖到哪个控件上,怎么确定是拖放出List控件区域了呢?Metro有没有类似Win32 API WindowFromPoint.
    2012年7月30日 1:19
  • 你可以在移动的时候做HitTest来获得当下的元素是什么。 参考此贴:http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/8c5345ff-5a99-46df-9485-a31dcbf0dbf8/ (C++, 但原理类似,你可以将代码转一下) 下面的代码是C#的,类似的获取当前指针下方的是否为ListViewItem

    var elements = VisualTreeHelper.FindElementsInHostCoordinates(e.GetCurrentPoint(sender as ListView).Position, sender as ListView);
    foreach (var element in elements)
    {
      if (element is ListViewItem)
      {
          ListViewItem item = element as ListViewItem;
            ...
        }
    }
    // 判断下方是否为ListViewItem的代码。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月30日 9:58
    版主
  • 还一个问题,如何设置拖动时控件的位置。比如在处理PointerMoved事件,要不断的跟随手势变换拖动对象的位置,但在XAML里,我只看到了Margin设置位置,没有看到Left,Top等属性,如何处理这种问题呢?
    2012年7月31日 2:47
  • Canvas 才有Left Top Right Bottom 四个附加属性,用来定义一个元素在Canvas中的相对位置。 一般如果我们是用的Grid布局的话,那么Margin 外边距这个属性用来确定一个元素在Grid中的位置。

    所以你可能需要外面得有一个Canvas包裹,然后通过改变这四个属性来实现移动。 请检查下你的移动的时候外面是不是一个Grid ,如果是,换一下。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Lake_zheng 2012年8月2日 0:34
    2012年8月1日 8:01
    版主