데이터 바인딩을 사용하여 Canvas에 표시 할 항목 목록이 있습니다.Binding을 통해 Canvas에 항목을 표시하는 방법
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은 텍스트에 대한 자동 특성을 가진 간단한 클래스이며, 상단과 왼쪽 내가 항목을 데이터 바인딩 할 때, 그들은 캔버스에 나타나지 않습니다
public class ItemDetail
{
public string Text { get; set; }
public double Top { get; set; }
public double Left { get; set; }
}
값. 그러나 항목은 Top 및 Left 속성을 사용하여 언급 한 위치에 나타나지 않습니다.
<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에
TextBlock
의 결합은 기본 itemspanel로서 사용 StackPanel에 설정한다. 추가하려는 텍스트 블록은 실제로 스택 패널에 추가되지만 캔버스에는 추가되지 않습니다. ItemsControl이 캔버스에 추가됩니다. 항목 패널을 캔버스로 바꿔보십시오. – Bathineni답변 주셔서 감사합니다. ItemsPanel을 Canvas로 넣으려고했으나 작동하지 않았습니다. 항목이 서로 위에 표시되기 시작했습니다. ItemContainerStyle을 추가하면 효과적입니다. –
[WPF : Canvas의 Children 속성을 XAML에 바인딩 할 수 있습니까?] (http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children) -property-in-xaml) –