Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不影响子级的情况下进行渲染转换_C#_Wpf - Fatal编程技术网

C# 在不影响子级的情况下进行渲染转换

C# 在不影响子级的情况下进行渲染转换,c#,wpf,C#,Wpf,我正在使用触摸事件调整画布的大小,如下所示: e.Handled = true; var transformation = MyCanvas.RenderTransform as MatrixTransform; var matrix = transformation == null ? Matrix.Identity :transformation.Matrix; matrix.ScaleAt(e.DeltaManipulation.Scale.X, e.Del

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

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,但我没有任何乐趣。

阅读下面的评论后编辑

如果是图表,您可能需要使用不同的轴范围重新绘制图表。RenderTransform可能不够精确,实际上,您必须缩小所有其他对象(轴、标签、网格线等)

先前的答案,仍然有效

您必须迭代子画布并单独缩放它们。据我所知,你想要的东西没有内置的支持

必须应用逆比例变换来抵消父对象的调整大小,并应用比例变换使其变小


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

您可以通过使用继承创建自定义画布

  • 一个新的依赖属性:NonInheritableScale

  • 将变换的比例绑定到NonHertiableScale属性之间的绑定

  • MeasureOverride()和ArrangeOverride()方法的重写,
    以便在布局过程中考虑1.0/nonhertiablescale.X和1.0/nonhertiablescale.Y


  • 以下是一篇可能对您有所帮助的文章(搜索结果,尚未阅读)。

    调整父画布的大小时,您希望子画布发生什么变化?你想让它们移动以保持相对位置还是保持相同的绝对位置?它们需要移动以保持相对位置而不是调整大小。谢谢Erno,我会尝试一下。我已经创建了一种散点图,在缩放时,我想增加它们之间的间距,以便清晰可见。啊,在这种情况下,你可能需要用不同的轴范围重新绘制图表。RenderTransform可能不够精确,实际上,您必须缩小其他所有对象(轴、标签、网格线等)是的,这是Pixelsense设备上的一个非常粗糙的图表,因此只有一个Y轴,基本上为0(高于正/低于负)尽管我毫不怀疑Danny Varod下面的解决方案也会起作用,但我还是选择了这个解决方案。