Mik*_*tly 5 xaml listview drag-and-drop uwp
使用触摸触发ListView项目的拖放操作时,似乎WinRT(Windows 8/8.1)和UWP(Windows 10)应用程序之间的行为已更改.
在WinRT中,向左或向右"撕开"项目会导致它被分离,从而启动拖动行为.在UWP中,用户必须轻敲并暂停一个项目,然后移动它以启动拖动动作.
我的问题是:有没有办法恢复/实现旧的WinRT风格的行为?新的方式不是很明显,在有限的用户测试中,我没有看到一个人在没有向他们解释的情况下解决问题.
作为一个简单的例子,下面的XAML适用于WinRT和UWP,但是基于触摸的交互在WinRT中很容易被发现.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView AllowDrop="True" CanReorderItems="True">
<ListView.Items>
<x:String>Item 1</x:String>
<x:String>Item 2</x:String>
<x:String>Item 3</x:String>
<x:String>Item 4</x:String>
<x:String>Item 5</x:String>
</ListView.Items>
</ListView>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在 WinRT 中,向左或向右“撕裂”项目会导致其分离,从而启动拖动行为。在 UWP 中,用户必须点击并按住某个项目一小会儿,然后移动该项目即可启动拖动操作。
是的,UWP 应用程序中启动拖动操作的行为已更改。
我的问题是:有没有办法恢复/实现旧的 WinRT 风格行为?
可能的方法是创建一个 DragBehavior 并附加到 ListView,在这个Behavior中,我们可以处理相关的触摸事件并使用UIElement.StartDragAsync 方法以编程方式启动拖放操作,以找到当前的ListViewItem,
public class FrameworkElementDragBehavior : DependencyObject, IBehavior
{
private bool isMouseClicked = false;
public DependencyObject AssociatedObject { get; private set; }
public void Attach(DependencyObject associatedObject)
{
var control = associatedObject as Control;
if (control == null)
throw new ArgumentException(
"FrameworkElementDragBehavior can be attached only to Control");
AssociatedObject = associatedObject;
((FrameworkElement)this.AssociatedObject).Holding += FrameworkElementDragBehavior_Holding;
((FrameworkElement)this.AssociatedObject).DragStarting += FrameworkElementDragBehavior_DragStarting;
}
private void FrameworkElementDragBehavior_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e)
{
//Just for example, not the completed code
var obj = ((ListView)sender).SelectedItem as ListViewItem;
if (obj != null)
{
//Call the UIElement.StartDragAsync method
}
}
private void FrameworkElementDragBehavior_DragStarting(UIElement sender, DragStartingEventArgs args)
{
throw new NotImplementedException();
}
public void Detach()
{
AssociatedObject = null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2957 次 |
| 最近记录: |