2011-07-21 22 views
3

wpfアプリケーションのカスタムリソーステーマを定義する際、幅/高さなどを設定できます...これらのプロパティのデフォルト値(フレームワークで提供されているコントロールで使用されている値) ?WPFコントロールのデフォルトサイズ

答えて

3

FrameworkElementsの既定の幅と高さはDouble.NaNです。別のサイズを指定しない場合、WPFコントロールはコンテンツ、コンテナ、またはその両方を自動的に試してサイズ調整します。

6

WPFコントロールには、通常、どのような種類のデフォルトサイズも含まれません。 WPFの主な機能ポイントの1つは、サイズを指定しない限り、すべてが動的にサイズ変更されることです。

無制限のスペースが与えられた場合にコントロールが望むスペースの量を測定したい場合は、それを作成し、Sizeを+無限大、+無限大で呼び出し、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にはButtonが含まれているので、最近私のテーマに問題がありました。 ressourceDictionaryのボタンコントロールの幅を変更すると、派生したコントロールにも影響があります。 – fabien

+0

実際に幅が元の値から変更されたかどうかを知る方法を実際に探していましたか? –

+0

はい、そうでない場合は予期しない結果が発生する可能性があります。 – fabien