WPF 中的坐标 Canvas

Coordinates in WPF Canvas

在 XAML 文件中为 canvas 形状定义坐标时,是否可以这样做:

<Canvas x:Name="myCanvas"
        DockPanel.Dock="Bottom"
        VerticalAlignment="Stretch">

    <Canvas.Background>
        <SolidColorBrush Color="White" Opacity="100" />
    </Canvas.Background>

    <Ellipse x:Name="ell1"
                Width="30"
                Height="30"
                Stroke="Black"
                StrokeThickness="1"
                Fill="Red" 
                Canvas.Left="100"
                Canvas.Top="50" />

    <Ellipse x:Name="ell2"
                Width="30"
                Height="30"
                Stroke="Black"
                StrokeThickness="1"
                Fill="Red" 
                Canvas.Right="100"
                Canvas.Top="50" />

    <Line Stroke="Black"
            StrokeThickness="1" 
            X1="ell1.Canvas.Right"                              *** look here ***
            Y1="ell1.Canvas.Top + ell1.Height/2"                *** look here ***
            X2="ell2.Canvas.Left"                               *** look here ***
            Y2="ell2.Canvas.Top + ell2.Height/2" />             *** look here ***

</Canvas>

或者唯一的方法是通过 C#?

谢谢, 马西莫

这应该可以轻松生成所需的结果。您可能需要调整网格的边距。

<Grid DockPanel.Dock="Bottom" Margin="100,50">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <Ellipse Grid.Column="0" Width="30" Height="30"
             Stroke="Black" StrokeThickness="1" Fill="Red"/>

    <Ellipse Grid.Column="2" Width="30" Height="30"
             Stroke="Black" StrokeThickness="1" Fill="Red"/>

    <Rectangle Grid.Column="1" Fill="Black" Height="1"/>
</Grid>

这个更简单:

<DockPanel DockPanel.Dock="Bottom" Margin="100,50">

    <Ellipse DockPanel.Dock="Left" Width="30" Height="30"
             Stroke="Black" StrokeThickness="1" Fill="Red"/>

    <Ellipse DockPanel.Dock="Right" Grid.Column="2" Width="30" Height="30"
             Stroke="Black" StrokeThickness="1" Fill="Red"/>

    <Rectangle Fill="Black" Height="1"/>
</DockPanel>

您确实可以像这样绑定到附加的 属性:

<Line ... X2="{Binding Path=(Canvas.Left), ElementName=ell1}" />

但是 XAML 中没有定义 +/ 运算符,因此您必须编写一些代码才能设置 Y1 属性 到 50 + 30 / 2

毕竟 XAML 是一种 标记 语言,而 C# 是一种编程语言。