2010-09-10 26 views
2

我想在一个画布上放置一个点来放置一个椭圆。我想要椭圆的中心在这一点上。此时,椭圆的最左边的最左边就是这一点。在Canvas上定位的WPF元素

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

回答

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); 

这样做的优点是您不必重复在您创建的每个椭圆中查找中心的逻辑。

希望这会有所帮助。

+0

这可以通过在扩展方法中使用Shape代替Ellipse来进一步推进。 'public static void SetCenter(this Shape s,double X,double Y){...}' – 2015-09-13 14:50:17

0

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

0

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

0

我有一个类似的问题设置ScaleTransform的中心在不同大小的控件的样式。 结束使用转换器绑定到ActualWidth/ActualHeight除以2.同样应该为TranslateTransform工作,如符文Grimstad提到的。

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