gpt4 book ai didi

wpf - 如何让 itemtemplate 知道其包含的模板?

转载 作者:行者123 更新时间:2023-12-03 10:39:59 25 4
gpt4 key购买 nike

我希望这个 Ellipse 从其对应的 BallViewModel 中获取其坐标,并使用它们来确定其在 Canvas 内的位置。
球列表绑定(bind)List<BallVM>在 mainviewmodel 中,因此我选择了一个带有 Canvas 面板的 itemsControl。

这种方法正确吗?

如果我尝试在 itemcontainerstyle 中绑定(bind)到 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>

最佳答案

当您将 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>

关于wpf - 如何让 itemtemplate 知道其包含的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com