我在画布上有一个点,我想放置一个椭圆。我希望椭圆的中心超过这一点。目前,椭圆的左上角最左边是这一点。
我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于该点的中心而不是从左上角调整它的大小???
答案 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" />