我有一个程序可以在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));
答案 0 :(得分:4)
如果宽度和高度是固定的,最简单的解决方案是将椭圆的RenderTransform
设置为TranslateTransform
,X
和Y
设置为负偏移等于椭圆的宽度和高度分别为:
<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>