2011-10-19 26 views
2

我試圖用WPF中的可移動/可調整大小的部件實現圖。 我想使用ItemsControl和ItemsPanel配置爲「DynamicCanvas」。 您現在需要了解DynamicCanvas的所有信息,它的作用類似於通常的畫布 - 除了一個例外 - 它利用附加屬性來存儲有關其子項X,Y屬性的信息。ItemsControl和控件附加屬性

我的代碼:

<ItemsControl IsTabStop="False" ItemsSource="{Binding ElementName=comboBox1,Path=SelectedItem.Source.Table}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <s:TableControl Table="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 

     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">--> 
      <c:DynamicCanvas SizeHeightToContent="True" SizeWidthToContent="True" ClipToBounds="True" SnapsToDevicePixels="True" PreviewMouseDown="Canvas_MouseDown" IsHitTestVisible="True" Background="Gray" > 


      </c:DynamicCanvas> 
      <!--</ScrollViewer>--> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

正在上DynamicCanvas顯示的控件是我的自定義類型(以下只有最重要的組成部分):

<ContentControl x:Class="SubiektCommerceSynchro.ViewModel.TableControl" 
       c:DynamicCanvas.Left="{Binding X,Mode=TwoWay}" 
       c:DynamicCanvas.Top="{Binding Y,Mode=TwoWay}" 
       Width="450" Height="300" 
></ContentControl> 

現在的問題和問題:

此處不起作用的部分是附加屬性c:DynamicCanvas.Left(Top)。 讓我們把它放在步驟:

1)DynamicCanvas預計其直接孩子有C:DynamicCanvas.Left和c:DynamicCanvas.Top定義

2)ItemsPanel投入到DynamicCanvas TableControls時,它們封裝在某種容器

3)DynamicCanvas在其直接子節點上看不到附加屬性=>將它們視爲定位在(0,0)處並使它們有效地無法移動。

我該如何解決這個問題?

回答

3

這有幫助嗎?

 <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="c:DynamicCanvas.Left" 
         Value="{Binding X,Mode=TwoWay}"/> 
       <Setter Property="c:DynamicCanvas.Top" 
         Value="{Binding Y,Mode=TwoWay}"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
+0

我不知道爲什麼,但我沒有看到你的答案。我自己找到了這個,甚至在下面寫了一篇關於它的評論。儘管如此,謝謝。 – kubal5003

1

您必須修改ItemContainerStyle中的項目包裝的ControlTemplate。如果將其設置爲簡單ContentPresenter,則這些項目將不會被包裹在任何內容中(DataTemplate的內容將直接粘貼到DynamicCanvas中)。

請參閱this article

+0

解決方案是完全不同的,但方向是正確的,所以謝謝。我不得不把' ' 在ItemContainerStyle中。 – kubal5003