我希望这个Ellipse从相应的BallViewModel中获取坐标,并使用它们来确定它在画布中的位置。
球的列表在mainviewmodel中绑定到List<BallVM>
,因此我选择了一个带有画布面板的itemsControl。
这种做法是否正确?
如果我尝试绑定到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>
答案 0 :(得分:1)
当您将ItemTemplate与ItemControls一起使用时,它不直接将您的Elippses放在Canvas上,而是将它们包装到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>