2010-02-11 31 views
2

我一直在努力解決一個問題,乍一看可能很長一段時間看起來很容易。簡而言之,問題是我想根據擴展器中標題的高度來定位擴展器。如何根據標題高度定位WPF擴展器?

長話短說,我有一個網格(目前,但可以很容易地更改)兩行。在第一行的底部(類頭),我想放置一個Expander。但是,我希望擴展器擴展到第二排。只需將膨脹機放在第一排,並將垂直排列設置到底部位置,我的擴展器就可以正確放置,但會將擴展制動(僅擴展到同一排)。設置Grid.RowSpan =「2」會使我的擴展器正確展開,但是會將我原來的垂直對齊制動到底部。我已經嘗試把膨脹機放在第二排,然後將膨脹機的邊緣綁定到膨脹機的ActualHeight(還有一個轉換器,它給了我一個與頂部高度相等的負頂邊距),結果非常好,直到我點擊我的擴展器:-)。由於某種原因,將綁定模式設置爲「OneTime」給我一個零保證金。

有沒有人有一個簡單的解決方案呢?它有助於爲我的擴展器創建一個基於畫布的控件模板(我的想法是畫布會繪製在其他控件之上)?我想我可以完成數據綁定到後代控制,如果這是支持的(我不認爲這是)。我錯過了任何明顯的解決方案嗎

我有可能改變膨脹機的控制模板,並改變我的窗口包含控件的網格佈局是不是一個問題,如果這可以幫助我無論如何。

我正在運行Visual Studio 2008,.NET 3.5。

//丹尼爾

+0

很明顯你在做什麼,但不是你實際想要達到的目標。我在下面給出了一個答案,這是一種可能適用於你的通用技術,但它可能是矯枉過正的。如果我明白你想達到什麼目的,我可能會提出一個更簡單的方法。一些不清楚的事情是:什麼應該控制網格線的高度?隨着標題的增長和縮小,應該改變什麼?膨脹機是否應該取代內容或覆蓋它?你的用戶界面模型可能會有所幫助。 – 2010-02-13 00:55:00

+0

由於諸如標誌等內容,上網格線的大小是固定的。下面的網格線就是「其餘」,即「主要」內容。我想將擴展器對齊上排的底部並將其擴展到第二排。如果需要,我希望它涵蓋任何「主要」內容。基本上就是這樣。如果我能做到這一點,我感到滿意。擴展頭中的字體大小可能會改變,所以我不能用一個負邊距(至少不是一個常量)來抵消位置。最後,如果我能夠準確定位膨脹機,我會很高興。 – Daniel 2010-02-19 07:32:23

回答

1

有一種方法,以使其顯示在單個膨脹器具有用於它的報頭和內容分離的佈局,所以它們可以在單獨的網格單元或窗口的甚至完全分開的部分。這可能是你真正想要完成的東西的矯枉過正,但這裏是:

  1. 創建一個擴展器與您的標題,但一個空的身體。把它放在上面的單元格中。
  2. 使用您想要的身體創建另一個擴展器,但將其Template屬性設置爲僅包含ContentPresenter的模板,因此不會顯示標題。將它放在較低的單元格中。
  3. 綁定第二擴張的IsExpanded屬性與第一膨脹的IsExpanded財產
  4. (可選)調整選項卡順序,以便兩個擴展器一起現在

當您展開上擴展低膨脹將擴大爲好。如果它們之間沒有差距,它們將看起來好像它們是單個擴展器。

另一個可能有效的選擇是使用單個擴展器並修改其模板,以使其整個標題(包括按鈕)具有VerticalAlignment =「Bottom」並位於零尺寸的Canvas內。在這種情況下,整個擴展器會進入你的較低單元格。這樣做的缺點是,上層單元的佈局不知道擴展器使用的空間,所以它可能會根據z順序將其他控件放在其上或下面。

相關問題