C# WPF元素在画布上的定位

C# WPF元素在画布上的定位,c#,.net,wpf,canvas,geometry,C#,.net,Wpf,Canvas,Geometry,我想在画布上放置一个椭圆。我想椭圆的中心在这一点上。此时,椭圆最左上角的边位于该点上方 我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于点的中心,而不是从左上角调整大小???没有这种方法。左上角是左上角,因为它是左上角:)。或者,如果您知道椭圆的尺寸,您可以移动点,而不是移动椭圆。您可以将a应用于椭圆,但这需要您知道其宽度和高度。我不知道椭圆中有任何内置功能可以将其中心设置在点上,但您可以扩展椭圆类来实现这一点 将此类添加到项目中 public static cl

我想在画布上放置一个椭圆。我想椭圆的中心在这一点上。此时,椭圆最左上角的边位于该点上方


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

没有这种方法。左上角是左上角,因为它是左上角:)。或者,如果您知道椭圆的尺寸,您可以移动点,而不是移动椭圆。

您可以将a应用于椭圆,但这需要您知道其宽度和高度。

我不知道椭圆中有任何内置功能可以将其中心设置在点上,但您可以扩展椭圆类来实现这一点

将此类添加到项目中

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);
    }
}
然后在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>
这样做的好处是,您不必重复在创建的每个椭圆中查找中心的逻辑


希望这有帮助。

我在设置不同大小控件样式的ScaleTransform的中心时遇到了类似的问题。 最后使用转换器绑定到实际宽度/实际高度除以2。正如Rune Grimstad所提到的,这同样适用于TranslateTransform

<ScaleTransform CenterX="{Binding ActualWidth, Converter={StaticResource divisionConverter}}"
                CenterY="{Binding ActualHeight, Converter={StaticResource divisionConverter}}"
                ScaleX="1.2"
                ScaleY="1.2" />

在扩展方法中使用形状代替椭圆,可以进一步实现这一点
publicstaticvoidsetcenter(此形状为s,双X,双Y){…}
<ScaleTransform CenterX="{Binding ActualWidth, Converter={StaticResource divisionConverter}}"
                CenterY="{Binding ActualHeight, Converter={StaticResource divisionConverter}}"
                ScaleX="1.2"
                ScaleY="1.2" />