2011-10-19 16 views
2

WPFで可動/サイズ変更可能な部品を含む図を実装しようとしています。 ItemsPanelを "DynamicCanvas"に設定してItemsControlを使用したいと思います。 今、DynamicCanvasについて知っておくべきことは、通常のキャンバスのように機能することです.1つの例外を除いて、付属のプロパティを使用して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を置くことはいくつかの種類でそれらをラップするとき(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

関連する問題