gpt4 book ai didi

c# - Windows 8 中的 wpf 触摸桌面应用程序

转载 作者:可可西里 更新时间:2023-11-01 10:24:27 25 4
gpt4 key购买 nike

我有一个 wpf 应用程序,我在 Windows 7 中编写并且运行良好。我正在移植到 Windows 8.1,触摸事件的行为完全不同。

我写了一个控件,当拖放到另一个相同类型的控件上时,它会切换位置。下面是控件的 previewTouchDown 和 Drop 处理程序。

private void UserControl_PreviewTouchDown(object sender, TouchEventArgs e)
{
DragDrop.DoDragDrop(this, _comparisonElement, DragDropEffects.Copy);
}

private void UserControl_Drop(object sender, DragEventArgs e)
{
ComparisonCopy from = (ComparisonCopy)e.Data.GetData("comparisonFormat");
ComparisonCopy to = (ComparisonCopy)_comparisonElement.GetData("comparisonFormat");

if (from != to)
{
ComparisonEventArgs args = new ComparisonEventArgs();
args.from = from;
args.to = to;

this.ComparisonMoved(sender, args);

e.Handled = true;
}
}

在 Windows 8.1 中运行它会导致拖放操作一次。一旦它起作用,它就永远不会再起作用。似乎初始拖放处于卡住状态。

我已经尝试使用允许多次切换的 DragMove 事件,但是,它会随机切换控件。只要我触摸屏幕上的另一个控件,它就会用那个控件替换最后一个控件。同样,触摸似乎以某种方式卡住了。

用鼠标执行此操作 100% 有效。

感谢您的帮助。-马特

最佳答案

我使用了这篇文章中的代码示例 Drag-and-Drop with Touch on Windows 7使用 Windows 8.1,我看到了类似的东西。

Drop 事件根本不会触发,直到将代码更改为处理 TouchMove 而不是 TouchDown。我最终得到的是以下内容:

<StackPanel>
<Label Content="StackOverflow" HorizontalAlignment="Center"
TouchMove="Label_TouchMove" />
<Label Content="Drag to here"
HorizontalAlignment="Center"
AllowDrop="True" Drop="Label_Drop" />
</StackPanel>

// Drag source
private void Label_TouchMove(object sender, TouchEventArgs e)
{
Label l = e.Source as Label;
DragDrop.DoDragDrop(l, l.Content + " was Dragged!", DragDropEffects.Copy);
}

// Drag target
private void Label_Drop(object sender, DragEventArgs e)
{
string draggedText = (string)e.Data.GetData(DataFormats.StringFormat);
Label l = e.Source as Label;
l.Content = draggedText;
}

但现在在拖动完成后会触发一个额外的 TouchMove。我找不到发生这种情况的原因。

关于c# - Windows 8 中的 wpf 触摸桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com