質問

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、またはその他のコンテナのコントロールテンプレートを作成できないのは残念です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top