我有一个自创的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(图像是画布对象的背景图像)
答案 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的父级不会同时设置其Width
或Height
。
例如,您可以将其放在另一个Canvas中,并明确地设置Canvas'Width
或Height
。或者您将其放入网格并为HorizontalAlignment
和VerticalAlignment
设置正确的值。