如何在windows 8应用程序中限制Canvas Delta操作

本文关键字:Canvas Delta 操作 应用程序 windows | 更新日期: 2023-09-27 18:23:35

我在Scrollviewer中有一个画布。现在我需要限制对画布的操作。它超出了滚动查看器,不可见。我的XAML代码如下:

<ScrollViewer x:Name="MyScrollView"
                                  HorizontalScrollMode="Auto" VerticalScrollMode="Auto"
                                  ZoomMode="Enabled" MinZoomFactor="1" ManipulationMode="All" VerticalScrollBarVisibility="Auto" 
                                  HorizontalScrollBarVisibility="Auto" Margin="0,0,0,0">
                        <canvas:CanvasControl x:Name="canvas" Height="560" Width="686"
                              Draw="Canvas_Draw" ManipulationMode="All" ManipulationDelta="Drag_ManipulationDelta">
                        </canvas:CanvasControl>

我的cs文件是这样的:

private CompositeTransform dragTranslation;
canvas.ManipulationDelta += Drag_ManipulationDelta;
            dragTranslation = new CompositeTransform();
            canvas.RenderTransform = this.dragTranslation;
void Drag_ManipulationDelta(object sender,
    ManipulationDeltaRoutedEventArgs e)
        {
            // Move the rectangle.
            if (dragTranslation != null)
            {
                dragTranslation.TranslateX += e.Delta.Translation.X;
                dragTranslation.TranslateY += e.Delta.Translation.Y;
               // dragTranslation.Rotation += e.Delta.Scale / Math.PI;
                //dragTranslation.TranslateX += e.Delta.Translation.X;
                //dragTranslation.TranslateY += e.Delta.Translation.Y;
            }
            }

如果有任何帮助,我将不胜感激。

如何在windows 8应用程序中限制Canvas Delta操作

在ManipulationDelta处理程序中,您可以检查翻译的结果。只有在终点可以的情况下才提交。

void Drag_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    // Move the rectangle.
    if (dragTranslation != null)
    {
         float newX = dragTranslation.TranslateX + e.Delta.Translation.X;
         float newY = dragTranslation.TranslateY + e.Delta.Translation.Y;
         if (IsInBounds(newX,newY))
         {
             dragTranslation.TranslateX = newX;
             dragTranslation.TranslateY = newY;
         }
    }
}

您可以定义适合您的场景的IsInBounds。

有关更多详细信息和示例代码,请参阅我的博客文章"约束操作"。