2011-09-09 25 views
0

我有以下問題改變Visible屬性,C#的PropertyGrid =>如何在運行時

在地圖編輯器,你可以把「接頭」(FarseerPhysics)上的對象,有23種類型的接頭(在枚舉)。關節幾乎相同(每個關節類型只有1-2個新的屬性)。我想讓用戶使用WinForm PropertyGrid更改關節。 因此,如果用戶更改屬性「JointType」(枚舉),PropertyGrid需要隱藏舊屬性並顯示新屬性,有沒有辦法實現這一點? (所有關節的所有屬性都保存在一個名爲JointItem一個班,我只需要動態地顯示/隱藏其中的一些)

+0

我沒有嘗試任何東西,因爲我不知道(我剛剛發現網絡中的屬性Browsable) – Blaxx

回答

3

有沒有簡單易用的內置支持PropertyGrid用於動態改變其屬性可見取決於另一個財產的價值。這並不意味着它不能完成,只是需要一點工作。

正如您已經發現的那樣,控制屬性是否可見的是BrowsableAttribute。所以基本上你需要動態地改變這個屬性,而做到這一點的方法是爲你的類創建你自己的TypeProviderTypeDescriptor,它動態地返回屬性的Browsable(false)Browsable(true)屬性被隱藏/顯示,取決於另一個屬性的值財產。我不會試圖描述TypeProviderTypeDescriptor如何在這裏工作,因爲它是一個相當長的主題,網上已經有很多關於這個主題的信息。

此外,您需要指定屬性上的[RefreshProperties(RefreshProperties.All)]屬性,以控制是否應該顯示其他屬性。這會強制propertygrid在屬性列表中查詢TypeDescriptor的值,只要它的值發生變化,您的TypeDescriptor就有機會返回一組不同的屬性,或者返回屬性的不同屬性。

我希望這至少能指引您朝着正確的方向發展。不幸的是,將這些東西粘合在一起需要相當多的工作。