按住右键单击与操纵事件的冲突

时间:2015-04-10 09:46:20

标签: c# wpf xaml

我正在使用Manipulation个事件(IsManipulationEnabledManipulationDelta等)来移动和缩放图片。这很好用。我还想使用右键单击创建一个选择矩形来定义图像上的区域(拖放,通常的方式,只有右键单击)。它可以在触摸(Surface)和非触摸(Win 7)设备上使用鼠标。虽然,当在表面上“右键单击”(因此用手指点击并按住)时,我会看到典型的小方块出现,但是当我移动手指之后,它会移动图像,而不是绘制矩形。看起来Manipulation事件优先于“手指右键单击”。我做错了什么?

 <Grid
    Name="theGrid"
    MouseMove="OnMouseMove"
    MouseRightButtonUp="theGrid_MouseRightButtonUp"
    MouseRightButtonDown="theGrid_MouseRightButtonDown"
    Background="Black">

    <Rectangle Name="RectangleContainingBackgroundImage"
               IsManipulationEnabled="True"
               RenderTransform="{Binding Path=ImageTransform}">
        <Rectangle.Fill>
            <ImageBrush x:Name="BackgroundImage" Stretch="Uniform"/>
        </Rectangle.Fill>
    </Rectangle>

开始时:

ScreenTouchManager touchManager = new ScreenTouchManager(this.theGrid);
this.RectangleContainingBackgroundImage.ManipulationStarting += touchManager.Image_ManipulationStarting;
this.RectangleContainingBackgroundImage.ManipulationDelta += touchManager.Image_ManipulationDelta;
this.DataContext = touchManager;

在ScreenTouchManager中:

public void Image_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
    // Ask for manipulations to be reported relative to the grid
    e.ManipulationContainer = this.ManipContainer; // MC = constructor param
}

谢谢。

1 个答案:

答案 0 :(得分:-1)

我做了一项研究,可以在这里找到答案:http://www.mobilemotion.eu/?p=1396&lang=en

  

VisualState更改由专用鼠标事件触发:For   例如,按钮的时候到达按下状态   发生OnMouseLeftButtonDown事件。手指触摸并保持事件是   通常使用鼠标右键映射到单击(当点击时   Windows解释说,屏幕并没有立即释放手指   这是右键单击操作) - OnMouseLeftButtonDown事件永远不会   火灾,永远不会达到压迫状态!

希望这有帮助。