WPF - 使用操作事件移动窗口会导致窗口闪烁

时间:2015-09-04 12:36:03

标签: c# wpf touch

我试图在触摸设备上移动窗口。我想使用操纵事件,因为我计划使用惯性。

问题是,当我尝试向左或向右移动窗口时,窗口开始闪烁(这是由操纵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
...

有人知道如何使用操纵事件实现窗口移动吗?

1 个答案:

答案 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;
    }
}

`

我在我的电脑上尝试了它,它有所帮助。