2011-10-12 62 views
1

我想讓這個Ellipse從它相應的BallViewModel中獲取它的座標,並使用它們來確定它在畫布中的位置。 在mainviewmodel中,球的列表綁定到List<BallVM>,因此我選擇了一個具有畫布面板的itemsControl。如何讓itemtemplate意識到它的包含模板?

這種方法是否正確?

如果我嘗試綁定到itemcontainerstyle內的X和Y,那麼它不是特定於某個球。

無論我在Canvas.bottom或canvas.left屬性中設置的橢圓始終位於左上角。

<Grid> 
     <ItemsControl ItemsSource="{Binding Balls}" Background="red"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas MouseMove="Canvas_MouseMove" Background="Blue"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 

      <ItemsControl.ItemTemplate> 
       <DataTemplate DataType="{x:Type VM:BallVM}"> 
        <Ellipse Canvas.Bottom="{Binding Y}" Canvas.Left="{Binding X}" Width="100" Height="100" Fill="Red"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 

回答

1

當您使用一個ItemTemplate與ItemControls它不直接把你Elippses畫布上,但它們包裝成一個ContentPresenter。所以你必須在ItemsPresenter上應用canvas.Bottom/Left屬性。您可以使用ItemContainerStyle執行此操作:

<ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="Canvas.Bottom" Value="{Binding Y}" /> 
       <Setter Property="Canvas.Left" Value="{Binding X}" />      
      </Style> 
</ItemsControl.ItemContainerStyle> 
<ItemsControl.ItemTemplate> 
      <DataTemplate DataType="{x:Type VM:BallVM}"> 
       <Ellipse Width="100" Height="100" Fill="Red"/> 
      </DataTemplate> 
</ItemsControl.ItemTemplate>