2010-08-15 78 views
3

我想使用一個面板,其子面板的座標指定爲總面板寬度/高度的百分比。此外,我應該能夠動畫座標屬性,例如使一個按鈕從10%移動到50%面板的寬度。帶百分比座標的面板

我做了2次嘗試:

  1. 使用網格,並指定大小明星 - 這是不夠的,因爲據我所知默認WPF無法通過動畫明星指定距離的屬性。我發現某個地方有一個自定義的類讓我可以這樣做,它甚至可以工作,但我認爲解決方案過於複雜,我正在尋找更簡單的東西。

  2. 使用具有固定寬度和高度的Canvas並將其放入Viewbox中 - 這是一個簡單的解決方案,但在調整Viewbox的大小時,Canvas的整個內容也會調整大小。我希望內容具有固定大小。

是否有一個簡單的解決方案,或者我應該實現我自己的面板(或者擴展現有的面板之一,即畫布)?

乾杯!

+1

使用Canvas without Viewbox。內容將有一個固定的大小,然後你可以在代碼中計算它的百分比。 – 2010-08-15 16:42:09

回答

5

我想:

  • Canvas,也許稱其爲RelativeCanvasRatioCanvas
  • 增加兩個附加屬性:XRatioYRatio
  • 覆蓋ArrangeOverride和循環對所有的孩子。對於每一個孩子,用自己的XRatio,並與ActualWidthRelativeCanvasActualHeight沿YRatio計算和他們Canvas.LeftCanvas.Top附加屬性應用價值

您可以按如下方式使用它:

<local:RelativeCanvas> 
    <!-- the top-left of this button will be center of panel --> 
    <Button local:RelativeCanvas.XRatio="50" local:RelativeCanvas.YRatio="50"/> 
</local:RelativeCanvas> 

在完成工作之後,您可能想要添加的一件事是控制對齊。例如,我可能會將控件的中心與指定比例對齊,而不是其左上角。

+0

謝謝!我不知道ArrangeOverride方法,這似乎是最乾淨的解決方案。我將把這個新面板放在一些dll中,使它可以重用。 – madbadger 2010-08-15 17:31:44

+0

你能詳細解釋一下嗎?如何計算基於XRatio和YRatio的新左和頂?如何獲得XRatio和Yratio? – GANI 2017-08-11 06:15:28