2012-06-13 40 views
5

Có bất kỳ sự khác biệt nào giữa việc sử dụng SetValue với (ví dụ) Canvas.LeftPropertyMargin Thuộc tính?Sự khác biệt giữa Thuộc tính Canvas và Lề số

Để được rõ ràng hơn:

<Canvas> 
    <Rectangle x:Name="rect">       
</Canvas> 

rect.SetValue(Canvas.LeftProperty, 10) 

tương đương với

rect.Margin = new Thickness(10, 0, 0, 0) 

hay không?

Trả lời

4

Thuộc tính Ký quỹ được sử dụng với mọi phần tử để xác định khoảng trống thừa xung quanh đối tượng. Nó hoạt động trong hầu hết tất cả các kiểu bố cục (StackPanel, Grid, ContentControls, v.v.)

Canvas.LeftProperty (cũng như trên cùng, phải và dưới) chỉ áp dụng cho các phần tử nằm ngay bên trong Canvas. Canvas sẽ sử dụng các giá trị này để xác định vị trí của đối tượng. Với các phần tử Hình dạng giống như Đường dẫn, Canvas cũng xem xét dữ liệu vị trí của Hình dạng khi xác định vị trí.

Về mặt kỹ thuật, thuộc tính được gắn Canvas sẽ tích lũy với dữ liệu vị trí vốn có của Hình dạng (nếu có) cũng như Ký quỹ. Bạn có thể sử dụng tất cả 3 để sửa đổi vị trí. Nhưng thông thường bạn sẽ cố gắng giữ cho nó đơn giản.

Ví dụ: Hình chữ nhật nên sử dụng thuộc tính Chiều rộng và Chiều cao cũng như Canvas.Left và Canvas.Top. Đường dẫn hoặc chỉ dựa vào dữ liệu điểm của nó hoặc nó sẽ bù đắp bằng Canvas.Left và Canvas.Top. Bạn không nên sử dụng lề cho các phần tử bên trong Canvas vì bạn có quyền kiểm soát tốt hơn mà không cần sử dụng nó, nhưng về mặt kỹ thuật bạn có thể sử dụng nó.

1

Có vẻ giống nhau nhưng trong trường hợp đầu tiên canvas di chuyển bạn rect ngay trong 10 điểm. Trong giây thứ hai, rect sẽ di chuyển ngay tại 10 điểm.

Sử dụng một trong các cách này theo mục đích của bạn.

EDIT: Nếu nhìn sâu hơn trong mã WPF. Trong trường hợp đầu tiên, rect được di chuyển trong ArrangeOverride Canvas trong trường hợp thứ hai ở ArrangeOverride của hình chữ nhật.

+0

Ok, nhưng sự khác biệt (nếu có) là gì? – Nick

+0

Kiểm tra câu trả lời đã chỉnh sửa của tôi. – RredCat

0
Canvas.Left 
Canvas.Right 
Canvas.Top 
Canvas.Bottom 

chỉ được thực thi bên trong vùng chứa canvas, chúng sẽ không thay đổi chiều rộng và chiều cao của kiểm soát mà chúng được gắn vào. (Trái = 10, phải = 10 sẽ không kéo dài để cung cấp cho một lề của 10 mỗi bên)

Margin.Left 
Margin.Right 
Margin.Top 
Margin.Bottom 

được điều khiển bởi các đối tượng mà nó được thiết lập trên, nó sẽ làm việc bên ngoài của một Canvas trên một mạng lưới cho ví dụ và sẽ thay đổi chiều rộng và chiều cao của bất kỳ điều khiển nào để thực thi giá trị của nó (NẾU chiều rộng và chiều cao là NaN).

0

Bạn có thể sử dụng thuộc tính Margin bên trong mẫu của đối tượng bằng cách sử dụng một liên kết mẫu hoặc liên kết thông thường vì nó là một DependencyProperty. Điều này cũng điều chỉnh chiều rộng và chiều cao của đối tượng.

Thuộc tính Canvas là thuộc tính đính kèm với FrameworkElement và cho phép định vị các phần tử có thể không có thuộc tính Lề.Và chúng không hoạt động nếu đối tượng không có bố mẹ Canvas.

1

Đối với một phần tử trực tiếp trong một Canvas, sự khác biệt duy nhất là trong phương tiện. Kết quả cuối cùng hoàn toàn giống nhau.

Khi vị trí Rectangle được đặt, công cụ bố cục sẽ cộng tất cả các giá trị ảnh hưởng đến vị trí của nó. Đối với các điều phối X, điều này bao gồm Canvas.LeftMargin.Left.

Vì vậy, trong một trường hợp, hãy thêm 10 + 0 và cách khác là thêm 0 + 10.

Vì vậy, hãy chọn bất kỳ điều gì bạn thích. Cá nhân tôi thích Canvas.Left trong tình huống này vì nó có vẻ mang lại cảm giác theo ngữ cảnh hơn.

Các vấn đề liên quan