我想在一个画布上放置一个点来放置一个椭圆。我想要椭圆的中心在这一点上。此时,椭圆的最左边的最左边就是这一点。在Canvas上定位的WPF元素
我知道我可以在画布上以编程方式移动椭圆,但是我想知道是否有办法告诉WPF将该元素居中在点上而不是从左上角调整大小?
我想在一个画布上放置一个点来放置一个椭圆。我想要椭圆的中心在这一点上。此时,椭圆的最左边的最左边就是这一点。在Canvas上定位的WPF元素
我知道我可以在画布上以编程方式移动椭圆,但是我想知道是否有办法告诉WPF将该元素居中在点上而不是从左上角调整大小?
我不知道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);
这样做的优点是您不必重复在您创建的每个椭圆中查找中心的逻辑。
希望这会有所帮助。
不,没有这样的方式。左上角是左上角,因为它是左上角:)。或者,如果您知道椭圆尺寸,则可以移动椭圆,而不是移动椭圆。
您可以将椭圆体应用TranslateTransform,但这需要您知道其宽度和高度。
我有一个类似的问题设置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" />
这可以通过在扩展方法中使用Shape代替Ellipse来进一步推进。 'public static void SetCenter(this Shape s,double X,double Y){...}' – 2015-09-13 14:50:17