自定义实现缩放(ZoomableCanvas)中的性能

时间:2016-06-09 13:07:14

标签: c# wpf canvas drawing 2d

我使用的是ZoomableCanvas类(ZoomableCanvas)

XAML:

        <ZoomableCanvas x:Name="MyCanvas" Background="Transparent" ApplyTransform="False" MouseWheel="MyCanvas_MouseWheel" />

现在我将10000个矩形添加到MyCanvas.Children和Rectangles recs列表中。

ZoomableCanvas提供的实现滚动(当ApplyTransform为true时)均匀,这意味着子对象的高度和宽度会改变它们的值。 为了我的目的,我只希望孩子的宽度在放大时增加它们的大小。高度不应该改变。 为此,我添加了以下自定义行为。

private void MyCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
    foreach (Rectangle r in this.recs)
    {     
        r.Width = r.Width + 10;
    }
}

这可行,但与实施的Zooming超慢速相比。为什么实现的缩放如此之快以及是否有可能以高效的方式实现我对自定义缩放的意图(仅影响对象的宽度)?

1 个答案:

答案 0 :(得分:0)


我也使用ZoomableCanvas并遇到同样的问题 我所做的是通过将Scale依赖属性替换为2个属性 ScaleX ScaleY 来改进 ZoomableCanvas

为了简化改进 1.复制依赖项属性Scale并粘贴两次ScaleX和ScaleY
2.删除或评论Scale依赖属性
3.编译和错误报告将简化以查找旧Scale属性的使用位置 4.使用ScaleX和ScaleY修改旧的Scale用法。