3

XAML プロパティを、それらが属する uielements のサイズに合わせてスケーリングする方法はありますか?

本質的に、作成したコントロール テンプレートが大きすぎて使用できません。主な理由は、同じコントロールを異なるサイズで使用したいからです。問題は、(ControlTemplate で) コントロール サイズを Auto に設定できることですが、組み込みテンプレート要素のプロパティのサイズが変更されません。たとえば、StrokeThickness は 10 のままで、1 になるはずです。

テンプレートに ScaleTransform を適用すると問題なく動作しますが、実際に使用するとコントロールが小さすぎます: width/height=Auto はコントロールを適切なサイズにサイズ変更し scaletransform が適用されます。だから私は一種の非スケーラブルなコントロールを持っています。

私はWPFに少し慣れていないので、これを行う簡単な方法があるかもしれません...

4

3 に答える 3

4

あなたの説明は少しあいまいですが、コントロールのルート要素として Stretch が Uniform に設定された ViewBox が必要なようです。

于 2008-10-15T00:02:34.747 に答える
1

テンプレート内のコントロールの幅と高さを、実行時にテンプレート化されたコントロールの幅と高さにそれぞれバインドしようとすることができます。何かのようなもの:

<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プロパティで指定されたものとは異なる場合があります。これは、値が最終的に実行時にビジュアルツリーの親コントロールのサイズを考慮して計算されるためです。

于 2008-10-14T12:15:52.740 に答える
0

残念ながら、StackPanel、DockPanel、Grid、またはその他のコンテナーのコントロール テンプレートを作成することはできません。

于 2008-11-18T21:49:37.290 に答える