Festlegen von Canvas-Eigenschaften in einer ItemsControl-Datenvorlage


79

Ich versuche, Daten zu diesem Thema zu binden ItemsControl:

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

Auf diese Weise DataTemplateversuche ich, meine NodeElemente individuell Canvasrichtig zu positionieren :

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

Es funktioniert jedoch nicht wie erwartet. Alle meine Knotenelemente werden an derselben Position übereinander gezeichnet. Irgendwelche Vorschläge, wie dies erreicht werden kann?

Antworten:


136

Die angehängten Eigenschaften funktionieren nur für direkte Kinder der Canvas. ItemsControlplatziert ContentPresenterSteuerelemente als direkte untergeordnete Elemente, daher möchten Sie möglicherweise auch dafür einen Stil hinzufügen:

<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>

Vielen Dank. Ich habe diese Lösung vor ungefähr 5 Minuten selbst gefunden. Ich glaube, ich war ein bisschen schnell beim Posten der Frage. :)
Atsjoo

9
Hehe .. Ich liebe diesen AHA-Moment auch;) .. Und es ist nicht alles schlecht .. Vielleicht kann deine Frage eines Tages auch anderen Menschen helfen .. Du wirst es nie erfahren!
Arcturus

Es hat auch hier geholfen, +1 für alle. :)
Rune Jacobsen

1
@skb Ich habe das gleiche Problem. Gibt es dafür eine Silverlight-Problemumgehung?
Themaestro

4
Was ist, wenn sich meine X- und Y-Position in einem der Objekte von ItemsSource befinden sollte? Ich habe ein Point-Objekt in meiner ItemsSource.
El Mac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.