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# 是一种编程语言。
在 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# 是一种编程语言。