次のように、ボタン用に独自の ControlTemplate を作成しました。
<Style x:Key="LightButtonStyle" TargetType="{x:Type ButtonBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<Border
x:Name="WrappingBorder"
Margin="{TemplateBinding Margin}"
...
>
<ContentPresenter
Content="{TemplateBinding Content}"
...
>
</ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
さて、ボタンにマージンを設定すると、次のようになります。
<Button
Style="{StaticResource LightButtonStyle}"
Margin="20"
>
Hello world!
</Button>
ボタンには実際には 2 倍の Margin - 40 があります。実際、コントロールは Margin を使用してはならず、Margin プロパティは配置フェーズ中にボタンの祖先によってのみ読み取られると想定しました。その後、WPF のデフォルト スタイルを調べたところ、いずれも Margin を使用していないことがわかりました。
これは正しい結論ですか (Margin はコンテナーによって正しく配置されるためだけに制御されているということです)? つまり、スタイルで {TemplateBinding Margin} を使用するたびに、代わりに 2 つのマージンが得られるのでしょうか。そして、私のコントロールが使用すべきではない同様のプロパティのリストはありますか (それらは「周囲の世界」のみを対象としているため)?
これについて説明している MSDN ページを教えてください。ありがとうございました!
編集:
http://msdn.microsoft.com/en-us/library/ms745058.aspxとhttp://msdn.microsoft.com/en-us/library/ms751709.aspxで答えを見つけるべきだと思いますが、私はしませんMargin プロパティを使用するのは決してコントロールではなく、それを評価してレイアウトに影響を与えるのは常に祖先または wpf システムであると明示的に述べたとは思わない...