Establecer las propiedades del lienzo en una plantilla de datos ItemsControl


80

Estoy tratando de vincularme a esto ItemsControl:

<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Al usar esto DataTemplate, estoy tratando de colocar individualmente mis Nodeelementos Canvascorrectamente:

<DataTemplate DataType="{x:Type Model:EndNode}">
    <Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</DataTemplate>

Sin embargo, no funciona como se esperaba. Todos los elementos de mi nodo se dibujan uno encima del otro en la misma posición. ¿Alguna sugerencia sobre cómo lograr esto?

Respuestas:


137

Las propiedades adjuntas solo funcionan en elementos secundarios directos de Canvas. ItemsControlcolocará ContentPresentercontroles como sus hijos directos, por lo que es posible que desee agregar un estilo para eso también:

<ItemsControl ItemsSource="{Binding Path=Nodes}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding Path=XPos}" />
            <Setter Property="Canvas.Top" Value="{Binding Path=YPos}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

Gracias. Encontré esta solución hace unos 5 minutos. Supongo que fui un poco rápido al publicar la pregunta. :)
atsjoo

9
Jeje ... Me encantan esos momentos AHA también;) .. Y no es del todo malo ... Quizás tu pregunta también pueda ayudar a otras personas algún día ... ¡Nunca lo sabrás!
Arcturus

También ayudó aquí, +1 para todos. :)
Rune Jacobsen

1
@skb Tengo el mismo problema, ¿hay alguna solución de Silverlight para esto?
themaestro

4
¿Qué pasa si mi posición X e Y debe estar dentro de uno de los objetos de ItemsSource? Tengo un objeto Point en mi ItemsSource.
El Mac
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.