2009-09-30 18 views
0

我在寫一個基本上是類似於Expression Blend或Visual Studio設計器的設計器的應用程序。因此,基本上在設計表面上有一堆UI元素,您可以執行諸如拖放,調整大小,旋轉等操作。設置元素邊界的一般方法

主容器控件將作爲設計表面,可以是任何控件它來源於Panel,其中包括諸如Canvas,Grid等控件。這個定位意味着任何面板派生控件作爲設計界面的支持,這就產生了一個問題,我需要找到一種常用的方法來設置子控件的大小和佈局該表面無論面板控制的類型是什麼。

我使用UIElement.Arrange()調用來移動/調整控件的大小,這可以工作,但是一旦父面板控件的佈局更新後,比如當您調整它的大小時,所有更改都會重置爲默認值。我也知道WPF面板控件中的當前2遍佈局邏輯,但是我無法從控件派生出來並用作背景對象。

簡而言之,是否有一種通用的方法來實現我想要的功能,在面板派生控件中設置子控件的大小/位置,正如我所見Blend/VS Designer確實知道如何將面板中的控件定位控制?或者它們是否也已知面板派生控件的硬編碼?

在此先感謝...

Özden

回答

0

你有沒有試圖改變你的孩子控制的保證金,這將讓你改變它的位置。我不認爲這是實現它的最佳方式,但它會起作用。

+0

感謝您的迴應... 對於網格控件,如您所說使用了頁邊距。但是,例如,當您在Blend中使用Canvas時,它會改爲設置Canvas.Left屬性。我只想了解是否有一種常用的方法來了解父母的能力併爲定位設置正確的屬性。 到目前爲止,我所有的研究都發現這是不可能的,也許blend/VS也會對此進行硬編碼。也許我應該使用TranslateTransform,這是我在所有可能的場景中共同發現的唯一的東西。 – 2009-09-30 22:18:50

0

你不能做到這一點,不同面板類型的整點id,他們不同地定位他們的孩子。

畫布是爲手動控制大小和位置而設計的,在網格上可以設置邊距 - 但無法控制StackPanel,WrapPanel或DockPanel上的位置(或者可以在幾乎所有WPF樣本中找到的輻射面板收集)