画布比例大小

时间:2012-03-28 20:12:10

标签: wpf

我有一个自创的usercontrol,它继承自canvas。 现在,这个画布对象始终具有宽度和高度之间的比例是非常必要的。 这怎么可能? 我试过这个,但它不起作用:

        private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)
    {

        Vector vec = VisualTreeHelper.GetOffset(this);
        if(e.WidthChanged)
            Arrange(new Rect(vec.X, vec.Y, ActualWidth, Image.Height / Image.Width * this.ActualWidth));
        else if(e.HeightChanged)
            Arrange(new Rect(vec.X, vec.Y, Image.Width / Image.Height * this.ActualHeight, ActualHeight));

    }

现在我想问你是否有任何想法。比例是Image.Height / Image.Width(图像是画布对象的背景图像)

1 个答案:

答案 0 :(得分:0)

您可以覆盖ArrangeOverride

protected override Size ArrangeOverride(Size arrangeSize)
{
    Size size = base.ArrangeOverride(arrangeSize);
    double aspectRatio = ...

    return new Size(size.Width, size.Width / aspectRatio);

    // or, if Height determines the final size
    // return new Size(size.Height * aspectRatio, size.Height);
}

您必须确保Canvas的父级不会同时设置其WidthHeight

例如,您可以将其放在另一个Canvas中,并明确地设置Canvas'WidthHeight。或者您将其放入网格并为HorizontalAlignmentVerticalAlignment设置正确的值。