Tengo una lista de elementos que quiero mostrar en Canvas utilizando el enlace de datos.Cómo mostrar elementos en Canvas mediante Enlace
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 es una clase simple con propiedades de auto para el texto, Superior e Izquierda valores
public class ItemDetail
{
public string Text { get; set; }
public double Top { get; set; }
public double Left { get; set; }
}
Cuando databind los artículos, que aparecen en el lienzo. Pero los elementos no aparecen en las posiciones mencionadas utilizando las propiedades Superior e Izquierda.
<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 utiliza StackPanel como ItemsPanel predeterminado. el bloque de texto que está agregando en realidad está agregando a un panel de distribución pero no a un lienzo. ItemsControl está agregando al lienzo. Intente cambiar el panel de elementos a lienzo – Bathineni
Gracias por la respuesta bathineni. Intenté poner ItemsPanel como Canvas pero no funcionó. Los elementos comenzaron a mostrar uno sobre el otro. Agregar el ItemContainerStyle funcionó. –
posible duplicado de [WPF: ¿Es posible enlazar una propiedad de Canvas's Children en XAML?] (Http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children -property-in-xaml) –