Ho una lista di elementi che voglio visualizzare in Canvas usando l'associazione dati.Come visualizzare gli elementi nella tela attraverso il 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 è una semplice classe con proprietà di auto per il testo, Top e Left valori
public class ItemDetail
{
public string Text { get; set; }
public double Top { get; set; }
public double Left { get; set; }
}
Quando ho DataBind gli articoli, lo fanno apparire in tela. Ma gli oggetti non appaiono nelle posizioni menzionate usando le proprietà Top e 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 utilizza StackPanel come ItemsPanel predefinita. il blocco di testo che si sta aggiungendo è in realtà aggiunto a uno stackpanel ma non alla tela. ItemsControl sta aggiungendo al canvas. Prova a cambiare pannello degli elementi su tela – Bathineni
Grazie per la risposta bathineni. Ho provato a mettere ItemsPanel come Canvas ma non ha funzionato. Gli oggetti iniziarono a mostrarsi uno sopra l'altro. Aggiunta di ItemContainerStyle funzionante. –
possibile duplicato di [WPF: è possibile associare la proprietà Children di una tela in XAML?] (Http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children -property-in-xaml) –