我在Canvas的中心绘制了一个Ellipse。这样做时,Ellipse的左上角实际上绘制在中心,但我希望Ellipse的中心点在中心。为此,我假设我需要一个RenderTransform,但我无法让它正常工作。
<Ellipse Stroke="Red" RenderTransformOrigin="0.5,0.5" StrokeThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Height="100">我是不是遗漏了一个属性?
发布于 2013-07-05 21:10:22
基本上,除非通过知道确切中心的viewModel进行绑定,否则无法通过附加属性完成此操作。您将需要使用后台代码来找出画布的中心。像这样:
myCanvas.SetLeft(elipse, (myCanvas.ActualWidth - elipse.ActualWidth) / 2);
myCanvas.SetTop(elipse, (myCanvas.ActualHeight - elipse.ActualHeight) / 2);发布于 2013-07-05 21:41:09
您可以使用转换器来实现所需的结果:
Xaml:
<Window.Resources>
<wpfApplication1:GetCentreConverter x:Key="CentreConverter"/>
</Window.Resources>
<Canvas x:Name="canvas">
<Ellipse Stroke="Red"
RenderTransformOrigin="0.5,0.5"
StrokeThickness="5"
Width="100"
Height="100"
Canvas.Left="{Binding ElementName=canvas, Path=ActualWidth, Converter={StaticResource CentreConverter}, ConverterParameter=50}"
Canvas.Top="{Binding ElementName=canvas, Path=ActualHeight, Converter={StaticResource CentreConverter}, ConverterParameter=50}"/>
</Canvas>转换器:
public class GetCentreConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var width = double.Parse(value.ToString());
var offset = double.Parse(parameter.ToString());
return width/2 - offset;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}发布于 2013-07-09 17:47:34
您可以使用Grid代替Canvas作为椭圆的容器。所以有了
HorizontalAlignment="Center" VerticalAlignment="Center"您将在Grid的中心定位您的椭圆。
https://stackoverflow.com/questions/17489615
复制相似问题