如何在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;
}
}
如果有任何帮助,我将不胜感激。
在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。
有关更多详细信息和示例代码,请参阅我的博客文章"约束操作"。