我有一個帶有自定義屬性的 UserControl:
public Size TestSize { get; set; }
我希望這個屬性在 UserControl 的設計期間顯示在屬性視窗中,而不僅僅是在 UserControl 用作實體的地方(例如,當拖放到表單上時)。
示例:在 UserControl 的設計器中,可以設定“AllowDrop”、“AutoScroll”、“BackColor”等屬性。我希望我的自定義屬性在設計器中以同樣的方式顯示。
我已經考慮并嘗試向屬性添加屬性,例如:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
但這似乎不是要走的路。
任何幫助表示贊賞!
uj5u.com熱心網友回復:
如果你真的想在 的設計器中顯示該屬性UserControl1,那么該屬性應該屬于它的基類。那是因為設計師的作業方式
- 假設設計器的根元素是 UserControl1,那么您在屬性視窗中看到的屬性是 UserControl1 的基類(可能是 UserControl)的可瀏覽屬性。要了解更多資訊,請閱讀答案的第二部分。
在大多數情況下,您不需要在設計器中顯示這些屬性,除非您想從該基礎派生多個控制元件并在派生控制元件的設計時配置該屬性,但我假設您知道您的要求,現在您可以根據您的要求做出決定。
這是設計師的作業方式:
- 它反序列化
.cs檔案(并查找 InitializeComponent 方法或 Designer.cs 檔案,還考慮與設計器相關的屬性)。 - 它創建基類的實體并將其添加到設計圖面,并應用反序列化的屬性值。(因此,您在設計器中看到的實體是基類的實體。這是一個技巧。例如,這就是為什么如果您有一個抽象基類,如果沒有一些解決方法,就不能將派生類作為根設計器。)
- 它基于反序列化代碼創建整個控制元件/組件樹。(因此設計表面上的控制元件是控制元件的真實實體)
當然還有很多其他的事情發生,比如讓擴展提供者作業,或者在設計時預過濾或后過濾屬性,但總的來說它就像我上面解釋的那樣作業。
更多資訊/相關帖子
其他一些相關答案:
- Form 的類似問題/答案:Custom browsable property for Form at design time
- 一個解釋設計器如何作業的答案,還包含一個有趣的示例,顯示了如何在設計器中顯示充滿語法錯誤的 .cs 檔案:Windows 表單設計器如何作業?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456214.html
