具有嵌套 ItemControl 的 ItemContainer 样式无法正确绑定

ItemContainer style with nested ItemControls won't bind correctly

我正在尝试做的事情的总结:

  1. 我有一个形状列表
  2. 所有形状都有一个方块列表
  3. 我想在 canvas 中绘制所有块并绑定它们的位置。

但现在的问题是,即使它绘制了我的块,它也没有正确绑定位置,它们总是出现在 (0,0)。

这是嵌套 ItemsControl 现在的样子:

<ItemsControl ItemsSource="{Binding Path=Shapes}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas Background="Aqua" Width="250" Height="400"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding Blocks}">
                    <ItemsControl.ItemContainerStyle>
                        <Style TargetType="ContentPresenter">
                            <Setter Property="Canvas.Left" Value="{Binding X}"/>
                            <Setter Property="Canvas.Top" Value="{Binding Y}"/>
                        </Style>
                    </ItemsControl.ItemContainerStyle>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Rectangle Width="{Binding Width}" Height="{Binding Height}" Fill="Black" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

那么我做错了什么或者做嵌套的 ItemControls 不好吗?

尝试使用 RenderTransform 而不是 Canvas Left 和 Top

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Rectangle Width="{Binding Width}" Height="{Binding Height}" Fill="Black">
            <Rectangle.RenderTransform>
                <TranslateTransform X="{Binding X}" Y="{Binding Y}" />
            </Rectangle.RenderTransform>
        </Rectangle>
    </DataTemplate>
</ItemsControl.ItemTemplate>