Tôi đã tạo ra ControlTemplate của riêng mình cho Button, như thế này:WPF: Tại sao tôi không nên sử dụng {TemplateBinding Margin} trong ControlTemplate - là Margin chỉ dành cho các container của phần tử?
<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>
Bây giờ, tôi đã nhận thấy rằng khi tôi đặt lề để nút của tôi, như:
<Button
Style="{StaticResource LightButtonStyle}"
Margin="20"
>
Hello world!
</Button>
nút có Margin thực sự tăng gấp đôi - 40. Tôi cho rằng kiểm soát nên, trên thực tế, không bao giờ sử dụng Margin, và tài sản Margin chỉ được đọc bởi tổ tiên của nút trong giai đoạn sắp xếp. Tôi đã xem xét sau đó vào phong cách mặc định của WPF, và phát hiện ra rằng không ai trong số những người sử dụng Margin.
Đây có phải là kết luận đúng hay không (rằng Margin chỉ được kiểm soát để được sắp xếp chính xác bởi các vùng chứa)? Nói cách khác, mỗi khi tôi sử dụng {TemplateBinding Margin} theo phong cách của tôi, tôi sẽ nhận được lợi nhuận gấp đôi? Và có một số danh sách các thuộc tính tương tự mà kiểm soát của tôi không nên sử dụng (vì chúng chỉ dành cho 'thế giới xung quanh')?
Bạn có chỉ cho tôi trang MSDN giải thích điều này không? Cảm ơn bạn!
EDIT:
Tôi đoán tôi nên tìm câu trả lời trong http://msdn.microsoft.com/en-us/library/ms745058.aspx và http://msdn.microsoft.com/en-us/library/ms751709.aspx, nhưng tôi không nghĩ rằng họ đề cập một cách rõ ràng rằng nó bao giờ sự kiểm soát người sử dụng thuộc tính Margin, rằng nó là luôn hệ thống tổ tiên hoặc hệ thống wpf đánh giá và sử dụng nó để ảnh hưởng đến bố cục ...
Cảm ơn, tôi nhận thấy điều này ... Bạn có biết về một số trang hoặc blog blog msdn có thể giải thích vai trò của Margin (và có thể thuộc tính bố cục cụ thể khác) trong bố cục không? Tôi đã cố gắng để google nó, nhưng đã đưa ra không có câu trả lời thực sự. –
Tôi chắc chắn rằng google có thể giúp bạn, nhưng tôi sẽ nói (hay đúng hơn là viết) một điều. Ký quỹ được container sử dụng trong quá trình sắp xếp của quá trình bố trí, vùng chứa sẽ đặt phần tử con ở vị trí bắt nguồn từ các sắp xếp ngang và dọc của nó và lề của nó. –
Cảm ơn bạn, đó là chính xác những gì tôi muốn - rằng tôi ngoại trừ Margin, tôi cũng không bao giờ nên sử dụng s HorizontalAlignment và VerticalAlignment bên trong mẫu. –