WPF : ControlTemplate에서 {templatebinding margin}을 사용해서는 안되는 이유 - 마진은 요소의 컨테이너에만 적용됩니까?

StackOverflow https://stackoverflow.com/questions/2006872

문제

나는 다음과 같이 버튼을 위해 내 자신의 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>

버튼은 실제로 이중 마진 -40을 가지고 있습니다. 컨트롤은 실제로 마진을 사용하지 않아야한다고 가정했으며, 마진 속성은 배열 단계에서 버튼의 조상으로 만 읽습니다. 그런 다음 WPF 기본 스타일을 살펴보고 그 마진 중 어느 누구도 사용하지 않았다는 것을 알았습니다.

이것이 올바른 결론입니까 (그 여백은 컨테이너에 의해 올바르게 배열되도록 제어됩니다)? 다시 말해, 내 스타일에서 {templatebinding margin}을 사용할 때마다 대신 이중 마진을 얻을 수 있습니까? 그리고 제어 제어가 사용해서는 안되는 유사한 속성 목록이 있습니까 ( '주변 세계'만을위한 것이기 때문에)?

이것을 설명하는 MSDN 페이지를 알려 주시겠습니까? 고맙습니다!

편집하다:

답을 찾아야 할 것 같아요 http://msdn.microsoft.com/en-us/library/ms745058.aspx 그리고 http://msdn.microsoft.com/en-us/library/ms751709.aspx,하지만 나는 그들이 절대 여백 속성을 사용하는 컨트롤 언제나 그것을 평가하고 레이아웃에 영향을 미치기 위해 그것을 사용하는 조상 또는 WPF 시스템 ...

도움이 되었습니까?

해결책

귀하의 결론은 옳습니다. 기본 템플릿 제공 프레임 워크를 보면 Margin 템플릿 내부는 Padding 통제의 속성.

다른 팁

마진은 레이아웃 시스템에 의해 자동으로 적용되며, 제어 템플릿 내부에서 패딩을 대신 사용해야합니다.

<Border x:Name="WrappingBorder" Margin="{TemplateBinding Padding}" ... />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top