0

我正在使用触摸事件调整画布的大小,如下所示:

e.Handled = true;
var transformation = MyCanvas.RenderTransform as MatrixTransform;
var matrix = transformation == null ? Matrix.Identity :transformation.Matrix;

matrix.ScaleAt(e.DeltaManipulation.Scale.X,
               e.DeltaManipulation.Scale.Y,
               e.ManipulationOrigin.X,
               e.ManipulationOrigin.Y);

MyCanvas.RenderTransform = new MatrixTransform(matrix);

画布有几个子画布。我不想调整它们的大小,实际上需要它们变小。所以看着 RenderTransform.Inverse 但我没有任何快乐。

4

2 回答 2

1

阅读下面的评论后编辑

在这种情况下,您可能希望使用不同的轴范围重新绘制图表。RenderTransform 可能不够准确,实际上您将不得不缩减其他所有内容(轴、标签、网格线......)

以前的答案,仍然有效

您将不得不遍历子画布并单独缩放它们。据我所知,没有支持你想要的东西。

您将必须同时应用反向缩放变换来否定父级的调整大小和使它们更小的缩放变换。

发布您正在使用的代码以获得更详细的帮助和/或反馈。

于 2012-11-28T11:15:23.470 回答
1

您可以通过从Panel继承来创建自定义画布

  1. 一个新的依赖属性:NonInheritableScale

  2. 将变换的比例绑定到 NonInhertiableScale 属性之间的绑定

  3. 覆盖 MeasureOverride() 和 ArrangeOverride() 方法,
    以便在布局期间考虑 1.0/NonInhertiableScale.X 和 1.0/NonInhertiableScale.Y。

这是一篇关于创建自定义 WPF 面板的文章,可能会对您有所帮助(搜索结果,尚未阅读)。

于 2012-11-28T11:25:49.183 回答