WPF绝对定位

pet*_*ter 6 .net c# wpf xaml

可能重复:
如何将画布绑定到矩形列表

WPF中的画布使用绝对位置是否正确?我有一个坐垫,我在画布上有矩形,它们的行为就像它们被放置在垂直堆叠面板上一样.

即我在0,0处放置一个矩形,在0,0处放置下一个矩形,但它出现在第一个下方.

我知道,例如,这是按照我的预期工作,即矩形将按预期重叠,

<Canvas>
    <Rectangle Canvas.Top="50" Canvas.Left="50" Width="50" Height="50"  Fill="AliceBlue" />
    <Rectangle Canvas.Top="60" Canvas.Left="60" Width="50" Height="50"  Fill="Pink" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

但我的情况比这复杂一点,

<Canvas Name="DrawingCanvas" Grid.Column="0" Grid.Row="0" Background="{TemplateBinding Background}" Margin="0,30,0,0">
    <ItemsControl Name="LineContainer" ItemsSource="{Binding Shapes}">
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type Models1:Rectangle}">
                <Rectangle Width="30" Height="30" Fill="Aquamarine" Canvas.Left="{Binding X}" Canvas.Top="{Binding Y}" >
                    <Rectangle.LayoutTransform>
                        <RotateTransform Angle="{Binding Angle}"></RotateTransform>
                     </Rectangle.LayoutTransform>
                 </Rectangle>
             </DataTemplate>
         </ItemsControl.Resources>
     </ItemsControl>
 </Canvas>
Run Code Online (Sandbox Code Playgroud)

我的代码中有一个项控件,它绑定到一个形状列表.这些形状绑定到这样的对象,

public class Rectangle : IShape, INotifyPropertyChanged
{
    private double angle;

    public string Text { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
    public double Angle {
        get
        {
            return angle;
        }
        set
        {
            if (angle != value)
            {
                angle = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Angle"));
                }
            }
        }
    }
    public Point Position { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)

但是所有形状的坐标都是0,0,但它们仍然是一个接一个地垂直排列.

有任何想法吗?

我想我现在正在接受它.项目控制本身使其行为像堆栈面板.任何替代品?

And*_*ite 2

您是正确的,画布使用绝对定位。在您的示例中,您已指定画布内每个矩形的顶部和左侧位置,但缺少矩形的宽度和高度属性,这就是它们可能无法按您想要的方式显示的原因。

下面的示例显示了两个重叠的矩形。

<Canvas>
    <Rectangle Canvas.Top="50" Canvas.Left="50" Width="50" Height="50"  Fill="AliceBlue" />
    <Rectangle Canvas.Top="60" Canvas.Left="60" Width="50" Height="50"  Fill="Pink" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)