0

ControlTemplateを定義している場合:

<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border BorderBrush="Orange" BorderThickness="3" CornerRadius="2"
Background="Red" TextBlock.Foreground="White">
<ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"/>
</Border>
</ControlTemplate>

そして私はそれをボタンコントロールにバインドしています

<WrapPanel>
<Button Margin="10" Padding="5" Template="{StaticResource ButtonTemplate}">Test</Button>
</WrapPanel>

TemplateBindingマークアップ拡張機能を含めない限り、Padding = "5"が受け入れられないのはなぜですか?他にどのようなプロパティが無視され、どのような状況で、またはそれらが無視されるか尊重されるかをどのように判断すればよいですか?

また、好奇心から、テンプレートバインディングを通常のデータバインディング式に置き換えても機能させることができますか?(もしそうなら、パスは何でしょうか?)私はまだWPFを学んでいて、いくつかのメカニズムをより深く理解したいだけです

4

2 に答える 2

1

TemplateBinding マークアップ拡張機能を含めないと、Padding="5" が受け入れられないのはなぜですか?

これが WPF の仕組みであり、テンプレートはいくつかのプロパティの使用方法を制御します。概念的に意味Paddingを成すためにテンプレートのどこに入る必要があるかをシステムが判断する方法がないため、手動でバインドする必要があります。とりわけ、 と をバインドする必要があります。MarginBackground

通常のバインディングは次のようになります。

Margin="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" 
于 2012-07-29T04:13:52.647 に答える
0

こんにちは、これは Dependency Property の機能が原因で発生しています。依存関係プロパティは優先度に従って値を取得し、次のようになります。 1) アクティブまたはアニメーション 2) ローカル (つまり、インライン) 値 3) テンプレート値 4) スタイル値 5) デフォルト値 . 上記では、両方 (ローカルとテンプレート) にマージン値が設定されていますが、ローカル値の方が優先度が高いため、この値が適用されます。これはなぜ起こっているのかに対する答えなので、これが役立つことを願っています.

于 2012-07-29T04:26:00.100 に答える