WPF元素在Canvas上的定位

vdh*_*ant 2 .net c# wpf geometry canvas

我在画布上有一个点,我想放置一个椭圆.我希望椭圆的中心超过这一点.此时,椭圆的左上角最左边是这一点.

我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于该点的中心而不是从左上角调整它的大小???

Sou*_*asu 7

我不知道Ellipse中的任何内置功能将其中心设置在一个点上,但您可以扩展Ellipse类来执行此操作.

将此类添加到项目中

public static class EllipseX 
{
    public static void SetCenter(this Ellipse ellipse, double X, double Y)
    {
        Canvas.SetTop(ellipse, Y - ellipse.Height/2);
        Canvas.SetLeft(ellipse, X - ellipse.Width/2);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在xaml中创建椭圆

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
   <Canvas Background="LightGray">
      <Ellipse      
          Name="myEllipse"      
          Fill="Red"
          Height="75"
          Width="75"
       />
   </Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)

然后在代码后面的代码中写入int:

myEllipse.SetCenter(200,200);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您不必重复在您创建的每个椭圆中查找中心的逻辑.

希望这可以帮助.