我閱讀有關的附加屬性和我剛讀,他們可以用類似的東西進行以下設置:如何設置附加屬性的程序設計工作?
Grid.SetRow(myElement, 0);
如果這是一個靜態方法,請問現在Grid.SetRow()
其中Grid
應該把myElement
進?或者它以某種方式將myElement
與第0行相關聯,所以當有新的Grid
對象(包括myElement
)時,它可以檢查myElement
應該轉到哪一行?
我閱讀有關的附加屬性和我剛讀,他們可以用類似的東西進行以下設置:如何設置附加屬性的程序設計工作?
Grid.SetRow(myElement, 0);
如果這是一個靜態方法,請問現在Grid.SetRow()
其中Grid
應該把myElement
進?或者它以某種方式將myElement
與第0行相關聯,所以當有新的Grid
對象(包括myElement
)時,它可以檢查myElement
應該轉到哪一行?
設置附加屬性時,該值僅存儲在元素中,而不是附加屬性所屬的類型。
例如,附列屬性來實現這樣的:
public static readonly DependencyProperty RowProperty = ...;
public static void SetRow(UIElement element, int value)
{
element.SetValue(RowProperty, value);
}
public static int GetRow(UIElement element)
{
return (int)element.GetValue(RowProperty);
}
所以,當你調用Grid.SetRow
,則內部element.SetValue
被調用。由於element
是一個依賴對象,因此它可以存儲這些附加屬性。您可以將其想象爲依賴對象內部的Dictionary<DependencyProperty, object>
(儘管實際上它更加複雜),您可以使用SetValue
和GetValue
訪問它。
所以該值只存儲在依賴對象本身內部。現在,當網格呈現自身時,它將遍歷其子節點以調用其測量和佈局例程。它還會爲每個孩子調用Grid.GetRow
來查看是否設置了附加的行屬性,並相應地在其自己的佈局階段中尊重這些選擇。
如果這是一個靜態方法,Grid.SetRow()現在應該如何將Grid放入myElement中?
它不知道
或者它的工作方式,它以某種方式myElement 0行相關聯,所以當有包括myElement一個新的網格對象,它可以只檢查在哪一行myElement應該去?
是的,沒錯
到底是什麼'IsBubbleSource'?它如何連接到'RowProperty'? – hattenn 2013-03-03 23:28:47
@hattenn對不起,從手冊複製/粘貼樣板代碼(我不記得那些,在Visual Studio中有一個很棒的''propa'片段:P),並且在更改名稱時錯過了這些代碼。 – poke 2013-03-03 23:30:29
沒問題:)謝謝你的好評! – hattenn 2013-03-03 23:31:52