WPF元素在Canvas上的定位

时间:2010-09-10 03:38:25

标签: c# .net wpf canvas geometry

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

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

4 个答案:

答案 0 :(得分: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);
    }
}

然后在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>

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

myEllipse.SetCenter(200,200);

这样做的好处是你不必重复在你创建的每个椭圆中找到中心的逻辑。

希望这有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我在使用不同大小的控件样式设置ScaleTransform的中心时遇到了类似的问题。 结束使用转换器绑定到ActualWidth / ActualHeight除以2.对于Rune Grimstad提到的TranslateTransform,这应该适用于你。

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