質問
XAMLプロパティが属するUiElementのサイズに合わせてXAMLプロパティをスケーリングする方法はありますか?
基本的に、使用するには大きすぎるコントロールテンプレートを作成しました。主に、異なるサイズの同じコントロールを使用するためです。問題は、コントロールサイズを(ControlTemplateで)Autoに設定できることですが、本質的なテンプレート要素のプロパティのサイズは変更されません。たとえば、StrokeThicknessは10のままですが、1になるはずです。
テンプレートにScaleTransformを適用すると正常に機能しますが、実際に使用するとコントロールが小さすぎます:width / height = Autoはコントロールを適切なサイズに変更し、 scaletransformが適用されます。だから私は一種の非スケーラブルなコントロールを持っています。
私はWPFに少し慣れていないので、これを行う簡単な方法があるかもしれません...
解決
テンプレート内のコントロールの幅と高さを、実行時にテンプレート化されたコントロールの幅と高さにそれぞれバインドしようとすることができます。次のようなもの:
<Button>
<Button.Template>
<ControlTemplate TargetType={x:Type Button}>
<Border Width="{TemplateBinding Property=ActualWidth}"
Height="{TemplateBinding Property=ActualHeight}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Button.Template>
</Button>
バインディングソースは、テンプレートコントロールの FrameworkElement.ActualWidth および FrameworkElement.ActualHeight プロパティであることに注意してください。これらのプロパティには、レンダリング後のコントロールの幅と高さが含まれます。これは、 Width および Height プロパティで指定されたものとは異なる場合があります。これは、ビジュアルツリー内の親コントロールのサイズを考慮して実行時に値が最終的に計算されるためです。
他のヒント
説明は少し曖昧ですが、コントロールのルート要素としてStretchをUniformに設定したViewBoxが必要なようです。
StackPanel、DockPanel、Grid、またはその他のコンテナのコントロールテンプレートを作成できないのは残念です。