首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF RenderTransform

WPF RenderTransform
EN

Stack Overflow用户
提问于 2013-07-05 21:04:32
回答 4查看 5.7K关注 0票数 0

我在Canvas的中心绘制了一个Ellipse。这样做时,Ellipse的左上角实际上绘制在中心,但我希望Ellipse的中心点在中心。为此,我假设我需要一个RenderTransform,但我无法让它正常工作。

代码语言:javascript
复制
<Ellipse Stroke="Red" RenderTransformOrigin="0.5,0.5" StrokeThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Height="100">

我是不是遗漏了一个属性?

EN

回答 4

Stack Overflow用户

发布于 2013-07-05 21:10:22

基本上,除非通过知道确切中心的viewModel进行绑定,否则无法通过附加属性完成此操作。您将需要使用后台代码来找出画布的中心。像这样:

代码语言:javascript
复制
myCanvas.SetLeft(elipse, (myCanvas.ActualWidth - elipse.ActualWidth) / 2);
myCanvas.SetTop(elipse, (myCanvas.ActualHeight - elipse.ActualHeight) / 2);
票数 1
EN

Stack Overflow用户

发布于 2013-07-05 21:41:09

您可以使用转换器来实现所需的结果:

Xaml:

代码语言:javascript
复制
<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>

转换器:

代码语言:javascript
复制
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();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-09 17:47:34

您可以使用Grid代替Canvas作为椭圆的容器。所以有了

代码语言:javascript
复制
HorizontalAlignment="Center" VerticalAlignment="Center"

您将在Grid的中心定位您的椭圆。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17489615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档