C# WPF元素在画布上的定位
我想在画布上放置一个椭圆。我想椭圆的中心在这一点上。此时,椭圆最左上角的边位于该点上方C# WPF元素在画布上的定位,c#,.net,wpf,canvas,geometry,C#,.net,Wpf,Canvas,Geometry,我想在画布上放置一个椭圆。我想椭圆的中心在这一点上。此时,椭圆最左上角的边位于该点上方 我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于点的中心,而不是从左上角调整大小???没有这种方法。左上角是左上角,因为它是左上角:)。或者,如果您知道椭圆的尺寸,您可以移动点,而不是移动椭圆。您可以将a应用于椭圆,但这需要您知道其宽度和高度。我不知道椭圆中有任何内置功能可以将其中心设置在点上,但您可以扩展椭圆类来实现这一点 将此类添加到项目中 public static cl
我知道我可以在画布上以编程方式移动椭圆,但我想知道是否有办法告诉WPF将元素置于点的中心,而不是从左上角调整大小???没有这种方法。左上角是左上角,因为它是左上角:)。或者,如果您知道椭圆的尺寸,您可以移动点,而不是移动椭圆。您可以将a应用于椭圆,但这需要您知道其宽度和高度。我不知道椭圆中有任何内置功能可以将其中心设置在点上,但您可以扩展椭圆类来实现这一点 将此类添加到项目中
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>
这样做的好处是,您不必重复在创建的每个椭圆中查找中心的逻辑
希望这有帮助。我在设置不同大小控件样式的ScaleTransform的中心时遇到了类似的问题。 最后使用转换器绑定到实际宽度/实际高度除以2。正如Rune Grimstad所提到的,这同样适用于TranslateTransform
<ScaleTransform CenterX="{Binding ActualWidth, Converter={StaticResource divisionConverter}}"
CenterY="{Binding ActualHeight, Converter={StaticResource divisionConverter}}"
ScaleX="1.2"
ScaleY="1.2" />
在扩展方法中使用形状代替椭圆,可以进一步实现这一点
publicstaticvoidsetcenter(此形状为s,双X,双Y){…}
<ScaleTransform CenterX="{Binding ActualWidth, Converter={StaticResource divisionConverter}}"
CenterY="{Binding ActualHeight, Converter={StaticResource divisionConverter}}"
ScaleX="1.2"
ScaleY="1.2" />