2013-04-27 3 views
1

В XAML ниже, пожалуйста, заполните узел «WhatGoesHere» и объясните мне, как это не испортит координаты на Canvas.несколько элементов в ItemsControl на холсте

<ItemsControl ItemsSource="{Binding ViewModels}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <WhatGoesHere?> 
       <Path Stroke="CornflowerBlue" StrokeThickness="2"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures}"/> 
        </Path.Data> 
       </Path> 
       <Path Stroke="Red" StrokeThickness="2"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures2}"/> 
        </Path.Data> 
       </Path> 
      </WhatGoesHere?> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Мой пример имеет два одного и того же типа объекта в шаблоне, но будет иметь несколько других видов контроля в там.

ответ

2

У вас есть более одного элемента в пределах DataTemplate. Вам нужно было бы поместить ваши два объекта Path в какой-то Panel, например, Grid. Вопрос в том, где все ваши координаты холста рассчитаны так, что вы можете привязать его к Grid? В вашей модели зрения? Тогда вы могли бы связать с ним, и это может выглядеть примерно так:

<ItemsControl ItemsSource="{Binding ViewModels}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid Canvas.Top="{Binding Y}" Canvas.Left="{Binding X}"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 

       <Path Stroke="CornflowerBlue" StrokeThickness="2"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures}"/> 
        </Path.Data> 
       </Path> 
       <Path Stroke="Red" StrokeThickness="2" Grid.Row="1"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures2}"/> 
        </Path.Data> 
       </Path> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

В случае, если у вас нет этих координат, то я бы рекомендовал использовать другое значение для ItemsPanelTemplate как VirtualizedStackPanel. Это может выглядеть следующим образом:

<ItemsControl ItemsSource="{Binding ViewModels}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizedStackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 
       <Path Stroke="CornflowerBlue" StrokeThickness="2"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures}"/> 
        </Path.Data> 
       </Path> 
       <Path Stroke="Red" StrokeThickness="2" Grid.Row="1"> 
        <Path.Data> 
         <PathGeometry Figures="{Binding Figures2}"/> 
        </Path.Data> 
       </Path> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Если бы вы могли сказать мне, что на самом деле ваш пытается достичь, я уверен, что я могу помочь вам в лучшую сторону.

+0

Я думал, что у меня появятся элементы холста, но, взглянув на ваш пример, я вижу, что мне нужен второй элемент ItemsControl внутри моего шаблона, где я включаю элементы холста. – Brannon

 Смежные вопросы

  • Нет связанных вопросов^_^