在中心WPF中使用带有原点的椭圆

时间:2013-10-29 17:20:02

标签: c# wpf canvas ellipse

我有一个程序可以在System.Windows.Shapes.Ellipse面板中拖动,旋转和调整Canvas的大小。

要在画布内调整椭圆并将其拖动并始终保持居中,我需要在每次原点时进行校正,因为椭圆的原点位于左上角。

默认情况下,有办法在Ellipse中心设置原点吗?

拖动:

Canvas.SetTop(ellipse, newX - (ellipse.Height / 2));
Canvas.SetLeft(ellipse, newY - (ellipse.Width / 2));

调整尺寸:

ellipse.Height = newHeight;
ellipse.Width = newWidth;

旋转:

ellipse.RenderTransform = new RotateTransform(angle,(ellipse.Width/2),(ellipse.Height/2));

2 个答案:

答案 0 :(得分:4)

如果宽度和高度是固定的,最简单的解决方案是将椭圆的RenderTransform设置为TranslateTransformXY设置为负偏移等于椭圆的宽度和高度分别为:

<Ellipse Width="100" Height="100" Fill="Red">
  <Ellipse.RenderTransform>
    <TranslateTransform X="-50" Y="-50" />
  </Ellipse.RenderTransform>
</Ellipse>

请注意,使用RenderTransform时需要注意的是,转换不适用于布局(并且您不能将TranslateTransform用于LayoutTransform)。这不应该是Canvas的问题,因为它处理布局的方式,尽管它可能与其他面板有问题。

答案 1 :(得分:0)

您可以使用保证金属性。

<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="600" Width="600">
    <Grid>
        <Canvas Width="300" Height="300">
            <Ellipse x:Name="ellipse" 
                     Canvas.Left="150" Canvas.Top="150" 
                     Width="50" Height="50" 
                     Margin="-25,-25" 
                     Stroke="Red"/>
        </Canvas>
    </Grid>
</Window>