我的問題是將一個元素的屬性正確綁定到另一個元素。使用FindAncestor綁定網格高度並將AncestorLevel綁定到另一個網格
這裏是我的代碼的結構:
數據模板包含一個網格(我們稱之爲網
GridA
),並在網格中,我指定一個控件的實例,稱爲ControlA
。ControlA
是包含Grid
的UserControl
。ControlA
(代碼隱藏)中有自定義邏輯,用於動態構建內容 - 但簡而言之,它使用另一個數據模板。ControlA
的數據模板由另一個Grid
組成。我想將此數據模板中此網格的Height
屬性綁定到我上面第一個項目符號點(網格名爲GridA
)中引用的數據模板中Grid
的Height
屬性。
這裏是我已經用於綁定的XAML,但本質上,它不是工作,因爲它沒有找到網格:
<Grid Height="{Binding Path=ActualHeight,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Grid,
AncestorLevel=2},
UpdateSourceTrigger=PropertyChanged}">
</Grid>
據我所知,通過指定AncestorLevel=2
,它將使用您正在查找的類型的第二個「找到」事件,在這種情況下,類型爲Grid
。所以在我看來,它將首先找到ControlA
中的Grid
,然後它將繼續向上走,並在第一個數據模板中找到Grid
,這是Grid
,名稱爲GridA
。這應該是第二次發生,是正確的?
感謝您的反饋意見。我同意你對設計的評論 - 這不是我的選擇,而是在我加入這個項目之前完成的。 關於您的建議,它是必須綁定到第一個網格的第三個網格。所以,你的第三個網格的例子指定AncestorLevel = 2,這就是我在我的例子中所陳述的。所以,我很困惑。如果我們都指定了AncestorLevel = 2,那麼我做錯了什麼? – Chris 2010-09-06 14:23:48
我有三個網格,而你聲明你有兩個網格。但也許我誤解了你的問題。如果您將您的祖先等級更改爲1,它會起作用嗎? – 2010-09-06 14:48:12