TemplateBinding được sử dụng để liên kết với các thuộc tính phần tử trong định nghĩa mẫu. Trong ví dụ của bạn, bạn có thể đã viết
<Border Padding="{Binding Padding}" ...>
có nghĩa là liên kết thuộc tính đệm của đường biên với thuộc tính đệm của ... cái gì? Bạn muốn nói, "thuộc tính đệm của điều khiển mà mẫu này đang được sử dụng cho." Bạn không thể cho nó một cái tên bởi vì bạn không biết x: Tên của điều khiển vào lúc này (ngay cả khi bạn đã làm, nó sẽ không hoạt động vì nó trong một tên khác). Tuy nhiên, bạn có thể làm điều này bằng cách định nghĩa một nguồn tương đối
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
hoặc sử dụng TemplateBinding đó là một phím tắt (*) cho trên
<Border Padding="{TemplateBinding Padding}" ...>
(*) Ngoài việc là ít tiết trong các trường hợp tạo mẫu này, TemplateBinding có một vài khác biệt so với liên kết thông thường:
- Được đánh giá tại thời điểm biên dịch. (ví dụ, nếu thuộc tính Padding không tồn tại, bạn sẽ nhận được một lỗi biên dịch. Nhưng nếu bạn sử dụng một ràng buộc với TemplatedParent, bạn sẽ chỉ thấy lỗi khi chạy.)
- Nó luôn luôn là một cách ràng buộc.
- Yêu cầu cả thuộc tính nguồn và mục tiêu là thuộc tính phụ thuộc.
- Có chức năng ít hơn nhiều (không có StringFormat, Delay, IsAsync, v.v. xem các thuộc tính của Binding so với TemplateBindingExtention).
Nguồn
2012-05-15 09:25:47
tại sao sự trở lại này và tại sao BorderThickness viết hai thời gian "" "BorderThickness =" {TemplateBinding BorderThickness} "" " – prjndhi
@Euphoric trang này có vẻ là kết quả đầu tiên của google cho truy vấn đó. ;) – ANeves