2013-03-11 40 views
1

我有一个WPF控件停靠在WinForms应用程序的WPF主机控件中。 WPF控件设置为水平和垂直拉伸,并且主控件停靠在锚定组框中。ScaleTransform在画布上调整缩小画布的速度高于儿童

我的WPF控件有一个Canvas,它填充了我用来放置从Canvas派生的自定义类的子元素的空间。

我订阅了主Canvas的SizeChanged事件并应用了一个缩放转换,以便在控件调整大小时,画布及其子项会缩小并像时尚一样成长,这是工作的,但由于某些原因,父项帆布的收缩率要比孩子们高得多,这使得儿童在某一点上从比例下降到画布上。

这是我的代码:

private void EditorCanvas_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     if (e.PreviousSize.Width == 0) 
      return; 
     double YDiff = e.PreviousSize.Height/e.NewSize.Height; 
     double XDiff = e.PreviousSize.Width/e.NewSize.Width; 

     Scale.ScaleY /= YDiff; 
     Scale.ScaleX /= XDiff; 
    } 

画布的孩子们似乎在正确率进行缩放,并在画布上似乎以高得多的速度进行缩放。

有没有人看到任何理由/知道为什么会发生这种情况?行为

图片...请注意较小的面板

后面的空格前 IMG

缩放 IMG

+0

发布解释问题的截图。 – 2013-03-11 17:33:10

+1

你在哪里应用ScaleTransform?它至少不应该应用于该Canvas本身,因为在SizeChanged事件触发时已经改变了大小。 – Clemens 2013-03-11 17:46:13

+0

这可能是问题所在。 ScaleTransform应用于整个画布上的SizeChanged事件。我会更多地考虑这一点。 – Gianni 2013-03-11 17:52:21

回答

3

此:

我订阅了主画布SizeChanged事件和应用规模 变换,使画布和孩子会缩小,在增长的缩放像时尚,当控制调整大小,这是工作,但 由于某种原因父画布收缩率比儿童高得多 ,使孩子脱落的画布在 某些点因为规模收益率。

是什么Viewbox。将一个Viewbox作为WPF可视化树中的根元素。并将其Stretch属性设置为任何适合您需要的属性。并删除所有大小的计算。 WPF不需要大小计算。

+0

我以前试过这个,遇到了一个问题,当我将视图包装在视图框中时,它会从画布上消失。我会阅读一些关于视框的内容,并回到你身边,除非你知道为什么会发生这种情况。 – Gianni 2013-03-11 17:56:51

+1

@Gianni请确保您为画布提供一些“平均”尺寸,例如'Width =“500”Height =“500”'。平均而言,我指的是您希望在真实世界场景中具有的平均大小。 – 2013-03-11 17:59:03

+0

哈......哇。添加固定大小解决了问题。现在,我认为这很有道理。谢谢HighCore – Gianni 2013-03-11 18:02:48

1

它看起来像你缺少一些中间步骤(即有些大小的变化)。如果您的应用程序无法足够快地处理大小更改事件,Windows可能会跳过一些中间以便赶上。例如,假设您的应用程序以1000的高度开始,然后快速更改为100,但在此过程中它会经历一些中等大小(500,250,125)。如果你错过了一个或两个那些你最终会得到这样的事情在你的scaleY计算:

0. Height = 1000; ScaleY = 1 
1. Height: 1000 > 500; ScaleY = 1/(1000/500) = 0.5 
2. [misses 250]; no scaleY adjustment 
3. Height: 250 > 125; ScaleY = 0.5/(250/125) = 0.25 // when it should actually be .125 
4. Height: 125 > 100; ScaleY = 0.25/(125/100) = 0.2 // when it should actually be 0.1 

而应该存储和使用原来的大小和计算绝对值,而不是不断差异 ..

+0

WPF不需要大小计算。 – 2013-03-11 17:34:36

+0

漂亮的黑客。但在WPF中完全不需要。也许在恐龙无用的winforms中。看到我的(接受的)答案。 – 2013-03-11 18:05:22