2011-03-20 124 views

回答

3

[DefaultValue]屬性只是設計者和序列化程序的提示。確保您在屬性中承諾的默認值實際上是屬性的值完全取決於您。屬性設置器在您的情況下不會被調用,因爲序列化器檢測到屬性的當前值等於默認值,因此可省略屬性分配。這是一種優化,它使InitializeComponent()更小更快。

您可以通過在構造函數中初始化屬性值來確保這一點。注意控件的Visible屬性默認爲true。

1

兩種選擇;

  • 帶走默認值(布爾默認爲false反正)
  • 使用ShouldSerialize *要清楚
後者

,你可能需要一個布爾值?跟蹤「組明確」與「隱含的默認」:

注意,reset *和* ShouldSerialize是由組件模型識別的圖案。

+0

我確實希望屬性具有默認值。我只想讓設計師實際調用屬性,而不是將其設置爲false(因此控件的可見性將會改變)。在運行時,它似乎可以正常工作,並且具有控件可見性的默認值。 – 2011-03-20 09:17:23

+0

@Yochai - Reset *和ShouldSerialize *的組合應該像預設一樣操作,但允許顯式控制。 – 2011-03-20 09:20:16

+0

1. bool默認值爲false,但可見的默認值爲true。所以我需要它設置爲false。我也可以叫這個。在InitializeComponent()... – 2011-03-20 09:24:51