Câu hỏi của tôi là về việc ràng buộc đúng thuộc tính của một phần tử với phần tử khác.Chiều cao lưới liên kết bằng cách sử dụng FindAncestor và AncestorLevel Để một lưới khác
Dưới đây là cấu trúc của mã của tôi:
Mẫu dữ liệu chứa một mạng lưới (chúng ta hãy gọi là lưới
GridA
), và trong lưới, tôi chỉ định một thể hiện của một điều khiển, được gọi làControlA
.ControlA
làUserControl
có chứaGrid
. Có logic tùy chỉnh trongControlA
(mã-đằng sau) tự động tạo nội dung - nhưng tóm lại, nó sử dụng một mẫu dữ liệu khác.Mẫu dữ liệu cho
ControlA
bao gồm một mẫu khácGrid
. Tôi muốn liên kết thuộc tínhHeight
cho lưới này trong mẫu dữ liệu này với thuộc tínhHeight
củaGrid
trong mẫu dữ liệu được tham chiếu trong dấu đầu dòng đầu tiên của tôi ở trên (lưới được gọi làGridA
).
Đây là XAML mà tôi đã sử dụng để ràng buộc, nhưng, về cơ bản, nó isnt làm việc, vì nó không tìm Lưới:
<Grid Height="{Binding Path=ActualHeight,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Grid,
AncestorLevel=2},
UpdateSourceTrigger=PropertyChanged}">
</Grid>
Tôi hiểu rằng bằng cách xác định AncestorLevel=2
, rằng nó sẽ sử dụng lần xuất hiện "tìm thấy" thứ hai của loại mà bạn đang tìm kiếm, trong trường hợp này, loại là Grid
. Vì vậy, trong tâm trí của tôi, đầu tiên nó sẽ tìm thấy Grid
trong ControlA
, sau đó nó sẽ tiếp tục đi bộ lên cây và tìm Grid
trong mẫu dữ liệu đầu tiên, là Grid
có tên GridA
. Đây sẽ là lần xuất hiện thứ hai, đúng không?
Cảm ơn phản hồi. Tôi đồng ý với bạn về các nhận xét liên quan đến thiết kế - đó không phải là lựa chọn của tôi và đã được thực hiện trước khi tôi thêm vào dự án này. Về đề xuất của bạn, đó là lưới thứ ba phải liên kết với lưới đầu tiên. Vì vậy, ví dụ của bạn cho lưới thứ ba quy định AncestorLevel = 2, đó là những gì tôi đã nêu trong ví dụ của tôi. Vì vậy, tôi bối rối. Nếu chúng ta đều chỉ định AncestorLevel = 2, tôi đang làm gì sai? – Chris
Tôi có ba lưới, trong khi bạn nói bạn có hai. Nhưng có lẽ tôi đã hiểu lầm câu hỏi của bạn. Nó có hoạt động nếu bạn thay đổi cấp độ tổ tiên của bạn thành 1? –