2011-07-21 188 views
3

爲wpf應用程序定義自定義資源主題時,我可以設置寬度/高度等......我如何找到這些屬性的默認值(即在框架中提供的控件中使用的值) ?WPF控件默認大小

回答

3

FrameworkElements的默認寬度和高度爲Double.NaN。如果您沒有指定不同的大小,那麼WPF控件會自動調整大小以嘗試適合其內容,容器或兩者。

6

WPF控件通常不包含任何種類的默認大小。 WPF的一個主要功能點是除非您指定大小,否則所有內容都會動態調整大小。

如果您確實想測量控件在給定無限空間時想要擁有的空間量,則可以創建它,使用大小爲+ infinity,+ infinity的方式調用Measure,然後選中DesiredSize。對於大多數控制,這會給你控制所需的最小尺寸。如果您在Measure中給出了固定大小,則某些控件將返回它們想要的尺寸範圍內的所有空間(例如Grid,TextBox,Button ...)。有些控件只能對其內容進行調整,所以他們會告訴你他們不需要空間(例如,StackPanel)。

所以,你必須問自己,爲什麼你甚至會想到WPF中的默認大小的概念,當幾乎所有的控件都做出來,以便它們根據它們的設置來調整它們的容量或大小。你想測量的主要是文本,你可以用上面的技巧來處理TextBlock或圖像等項目。

編輯:查詢任何的DependencyProperty的默認值,使用屬性的元數據:

double defaultWidth = double.NaN; 
PropertyMetadata widthMeta = TextBlock.WidthProperty.DefaultMetadata; 
if (widthMeta != null && widthMeta.DefaultValue is double) 
    defaultWidth = widthDefault.DefaultValue; 

要重置的DependencyProperty爲它的默認值,調用的DependencyObject的ClearValue:

MyTextBlock.ClearValue(TextBlock.WidthProperty); 

要檢查本地設定值:

if (MyTextBlock.ReadLocalValue(TtextBlock.WidthProperty) != DependencyProperty.UnsetValue) 
+0

好的我同意你的答案。然而那不是我真正想要的。我最近有一個問題與我的主題,因爲DatePicker包含按鈕。如果我改變了ressourceDictionary中按鈕控件的寬度,它也會影響我的派生控件。 – fabien

+0

所以你實際上在尋找一種方法來知道寬度是否已經從原始值改變了? –

+0

是的,否則我們可能會遇到意外的結果 – fabien