Tôi đang sử dụng ItemsControl nơi ItemsPanel được đặt thành Canvas (xem this câu hỏi để biết thêm thông tin cơ bản). Các ItemsControl được thực hiện như tôi muốn, và nó hoạt động như một nét duyên dáng khi thêm một phần tử con bằng tay bằng cách đặt nó vào ItemsControl.Items:Khi sử dụng ItemsControl ItemsControl.ItemsPanel được đặt thành Canvas, ContenPresenter đi vào và ngắt thuộc tính Canvas của tôi trên [WPF]
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Items>
<Button Canvas.Left="500" Content="Button Text" />
</ItemsControl.Items>
</ItemsControl>
Note thuộc tính Canvas.Left vào nút. Điều này hoạt động giống như một sự quyến rũ, và nút được đặt 500 pixel từ bên trái của ItemsControl bên trái. Tuyệt quá!
Tuy nhiên, Khi tôi đang xác định một ItemsSource ràng buộc vào một danh sách, các Canvas.Left không có bất kỳ tác dụng:
<ItemsControl ItemsSource="{Binding Elements}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Canvas.Left="500" Content="Button Text" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Bằng cách kiểm tra tình hình ứng dụng trong thời gian chạy, tôi thấy một sự khác biệt. Vùng chứa ContentPresenter đã được thêm giữa Canvas và nút ..
Làm cách nào tôi có thể đặt thuộc tính Canvas.Left trên chính ContentPresenter? Hoặc là có một cách khác để giải quyết vấn đề này?
Nhờ tất cả!
Có vẻ lạ nhưng điều này làm việc cho tôi. – bryanbcook
Bạn cũng có thể ràng buộc giá trị trong ItemContainerStyle và nó sẽ sử dụng cùng một mục với DataTemplate dùng làm nguồn. :-) –
Bạn là anh hùng của tôi hôm nay. Cảm ơn bạn. –