C# 如何维护Xamarin表单控件';堆栈布局中的s纵横比
我有一个应用程序。SkiaSharp视图需要以特定的纵横比绘制。视图的宽度取决于其父视图(以及手机大小/习惯用法),因此在首次创建视图时,宽度并不总是已知的,因此我无法在首次构建视图时设置宽度 我不能使用,因为我需要将SkiaSharep视图放在一个有更多控件的视图下。另外,我正在寻找一个更通用的解决方案,我可以将SkiaSharp视图放置在任何布局对象(如网格)中C# 如何维护Xamarin表单控件';堆栈布局中的s纵横比,c#,user-interface,layout,xamarin.forms,C#,User Interface,Layout,Xamarin.forms,我有一个应用程序。SkiaSharp视图需要以特定的纵横比绘制。视图的宽度取决于其父视图(以及手机大小/习惯用法),因此在首次创建视图时,宽度并不总是已知的,因此我无法在首次构建视图时设置宽度 我不能使用,因为我需要将SkiaSharep视图放在一个有更多控件的视图下。另外,我正在寻找一个更通用的解决方案,我可以将SkiaSharp视图放置在任何布局对象(如网格)中 我有没有办法为SkiaSharp视图指定纵横比,并让它根据所需的纵横比和宽度自动调整其高度?由于首次创建视图时无法确定视图的宽度,
我有没有办法为SkiaSharp视图指定纵横比,并让它根据所需的纵横比和宽度自动调整其高度?由于首次创建视图时无法确定视图的宽度,因此代码必须对当时的宽度更改和设置高度请求作出反应
// If you want to dynamically adjust the aspect ratio after creation
// this property should have logic in its setter to adjust the height request
public float DesiredAspectRatio { get; set; }
public MyControl()
{
// Subscribe to the SizeChanged event in the constructor
SizeChanged += HandleSizeChanged;
}
private void HandleSizeChanged(object sender, EventArgs e)
{
if (this.Width > 0 && desiredAspectRatio > 0)
{
var desiredHeightRequest = this.Width / DesiredAspectRatio;
// int it to make sure there's no weird recursive behavior
// caused in release by how floats/doubles are handled.
if((int)desiredHeightRequest != (int)HeightRequest)
{
this.HeightRequest = (int)desiredHeightRequest;
InvalidateMeasure();
}
}
}
我不确定是否需要InvalidateMeasure
,但上面的代码对我有效