Встановлення властивостей полотна в шаблоні данихControl DataTemplate


80

Я намагаюся прив'язати дані до цього ItemsControl:

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

Використовуючи це DataTemplate, я намагаюся правильно розташувати свої Nodeелементи Canvasправильно:

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

Однак це працює не так, як очікувалося. Усі мої елементи вузла намальовані один на одному в однаковому положенні. Будь-які пропозиції щодо того, як це зробити?

Відповіді:


137

Вкладені властивості працюють лише на прямих дітей домену Canvas. ItemsControlбуде розміщувати ContentPresenterелементи керування як своїх прямих дочірніх організацій, тож ви можете додати стиль і для цього:

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

Дякую. Я сам знайшов це рішення близько 5 хвилин тому. Здається, я трохи швидко поставив запитання. :)
atsjoo

9
Хе-хе .. Я теж люблю ці моменти AHA;) .. І це не все погано ... Можливо, ваше запитання може допомогти іншим людям одного дня .. Ви ніколи не дізнаєтесь!
Арктур

Це допомогло і тут, +1 для всіх. :)
Руне Якобсен,

1
@skb У мене така сама проблема, чи є для цього обхідний шлях Silverlight?
теместро

4
Що робити, якщо моя позиція X та Y повинна знаходитися всередині одного з об’єктів ItemsSource? Я отримав об’єкт Point у своєму ItemsSource.
El Mac,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.