关于WPF中缩放控件的问题

三秦灬大帝 2014-01-21 03:26:42
在Win8触屏电脑上开发一款触屏软件,在控件缩放的时候如何控制缩放的最小界限和放大的时候每次只能在原图的基础上放大25%,还有在平移的过程中如何控制平移的页面不能处于其父控件的内部。如下贴出部分代码和效果,求高手帮忙。

private void inkCanvas_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
e.ManipulationContainer = canvas;
e.Mode = ManipulationModes.All;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}

private void inkCanvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement element = (FrameworkElement)e.Source;
element.Opacity = 0.9;

try
{
Matrix matrix = ((MatrixTransform)element.RenderTransform).Matrix;

var deltaManipulation = e.DeltaManipulation;

Point center = new Point(element.Margin.Left, element.Margin.Top);
center = matrix.Transform(center);

matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);


//matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);

if (this.canvas.Margin.Left > 0 && this.canvas.Margin.Top > 0) { }

if (this.Margin.Left > 0&&this.Margin.Top<0)
{
matrix.Translate(0, deltaManipulation.Translation.Y);
}
else if (this.Margin.Left < 0 && this.Margin.Top > 0)
{
matrix.Translate(deltaManipulation.Translation.X, 0);
}
else if (this.Margin.Left > 0 && this.Margin.Top > 0)
{
matrix.Translate(0, 0);
this.Margin = new Thickness(0, 0, this.Margin.Right, this.Margin.Bottom);
}
else
{
matrix.Translate(deltaManipulation.Translation.X, deltaManipulation.Translation.Y);
}


((MatrixTransform)element.RenderTransform).Matrix = matrix;
}
catch { throw new Exception(); }
}

private void inkCanvas_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
FrameworkElement element = (FrameworkElement)e.Source;
element.Opacity = 1;

if (this.canvas.Margin.Left > 0 && this.canvas.Margin.Top > 0) { }
Point point=inkCanvas.TransformToVisual(canvas).Transform(new Point());
//MessageBox.Show(point.X + "," + point.Y+"|"+element.Margin.Top+","+element.Margin.Left);

if (point.X > 0)
{
System.Windows.Controls.Canvas.SetLeft(inkCanvas, 0);
//inkCanvas.Margin = new Thickness(0, inkCanvas.Margin.Top, inkCanvas.Margin.Right, inkCanvas.Margin.Bottom);
}
if (point.Y > 0)
{
System.Windows.Controls.Canvas.SetTop(inkCanvas, 0);
//inkCanvas.Margin = new Thickness(inkCanvas.Margin.Left, 0, inkCanvas.Margin.Right, inkCanvas.Margin.Bottom);
}
}





如图,运动的时候 白色的时画板部分,绿色的为父控件容器的颜色,不能让移动的出现绿色,也不能缩小的出现绿色。

求高手贴出代码:
...全文
354 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
公西雒 2014-01-22
  • 打赏
  • 举报
回复
表示看不懂你的问题
三秦灬大帝 2014-01-22
  • 打赏
  • 举报
回复
什么情况啊!都放年假了,没人帮我忙了。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧