我试图在触摸设备上移动窗口。我想使用操纵事件,因为我计划使用惯性。
问题是,当我尝试向左或向右移动窗口时,窗口开始闪烁(这是由操纵delta事件引起的,请参阅后面的内容)。
我能够将行为重现为以下示例:
<Window x:Class="MultiTouchTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Width="525"
Height="350"
IsManipulationEnabled="True"
ManipulationDelta="UIElement_OnManipulationDelta"
WindowStyle="None" />
代码背后的代码:
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
Debug.WriteLine(e.DeltaManipulation.Translation.X);
Left += e.DeltaManipulation.Translation.X;
e.Handled = true;
}
}
和WriteLine()的输出是:
3
-3
3
-3
3
-3
3
-3
...
有人知道如何使用操纵事件实现窗口移动吗?
答案 0 :(得分:0)
如果你改变了左边的属性,那么OnManipulationDelta事件会被触发另一个具有新相反值&#34; e.DeltaManipulation.Translation.X&#34;的事件。不幸的是,在更改Left属性期间关闭事件并没有帮助。 尝试使用以下代码:
`
public partial class MainWindow
{
bool mCausedByCode = false;
public MainWindow()
{
InitializeComponent();
}
private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
Debug.WriteLine(e.DeltaManipulation.Translation.X);
if(!mCausedByCode)
{
Left += e.DeltaManipulation.Translation.X;
mCausedByCode = true;
}
else
{
mCausedByCode = false;
}
e.Handled = true;
}
}
`
我在我的电脑上尝试了它,它有所帮助。