使用操作事件移动窗口会导致窗口闪烁
本文关键字:窗口 闪烁 移动 操作 事件 | 更新日期: 2023-09-27 18:11:23
我正在尝试移动触摸设备上的窗口。我想使用操作事件,因为我还打算使用交互。
问题是,当我尝试向左或向右移动窗口时,窗口开始闪烁(这是由操作增量事件引起的,见后面)。
我能够将行为复制到以下示例中:
<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
...
有人知道如何实现窗口移动使用操纵事件吗?
如果你改变了的Left属性,OnManipulationDelta事件会触发另一个新的相反值"e.DeltaManipulation.Translation.X"。不幸的是,在更改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;
}
}
我在我的电脑上试过了,效果不错。