Tôi có danh sách các mục mà tôi muốn hiển thị trong Canvas bằng cách sử dụng ràng buộc dữ liệu.Cách hiển thị các mục trong Canvas qua Binding
ItemsToShowInCanvas = new ObservableCollection<ItemDetail>
{
new ItemDetail {Text = "ABC", Top = 10, Left = 200},
new ItemDetail {Text = "DEF", Top = 100, Left = 300},
new ItemDetail {Text = "PQR", Top = 50, Left = 150}
};
ItemDetail là một lớp đơn giản với tính chất tự động cho Text, Top và Left giá trị
public class ItemDetail
{
public string Text { get; set; }
public double Top { get; set; }
public double Left { get; set; }
}
Khi tôi DataBind các mục, họ xuất hiện trong canvas. Nhưng các mục không xuất hiện ở các vị trí được đề cập bằng cách sử dụng thuộc tính trên cùng và bên trái.
<Canvas>
<ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Text}" Canvas.Top="{Binding Path=Top}" Canvas.Left="{Binding Path=Left}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
ItemsControl sử dụng StackPanel như ItemsPanel mặc định. textblock mà bạn đang thêm vào thực sự đang thêm vào một stackpanel nhưng không thêm vào canvas. ItemsControl đang thêm vào canvas. Hãy thử thay đổi itemspanel thành canvas – Bathineni
Cảm ơn câu trả lời bathineni. Tôi đã thử đặt ItemsPanel là Canvas nhưng nó không hoạt động. Các mục bắt đầu hiển thị cái này qua cái kia. Thêm ItemContainerStyle đã làm việc. –
có thể trùng lặp của [WPF: Có thể liên kết thuộc tính Trẻ em của Canvas trong XAML không?] (Http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children -property-in-xaml) –