2013-03-11 41 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