我想知道是否可以编辑Xamarin.Forms source code然后像你通常在你的xamarin.forms项目中那样使用编辑过的那个。
基本上,我的目标是更改PhoneMasterDetailRenderer以更改母版页的宽度值。 (它是屏幕的一个百分比, 0.8 ,因此通过更改它应该调整主屏幕的大小?)
以下是我希望更改的代码部分:
void LayoutChildren(bool animated)
{
var frame = Element.Bounds.ToRectangleF();
var masterFrame = frame;
masterFrame.Width = (int)(Math.Min(masterFrame.Width, masterFrame.Height) * 0.8);
...
}
无法改变母版宽度的问题在很长一段时间内都是一个问题,希望这可能会导致解决方案。
谢谢,丹尼尔。
答案 0 :(得分:2)
我建议您不要编辑源代码。但我们也可以创建自己的MasterDetailPage的渲染器。这可能有点困难,让我们一步一步来做。
首先,在我们自己的BindableProperty
类中定义MasterDetailPage
,如:
public readonly static BindableProperty WidthRatioProperty =
BindableProperty.Create("WidthRatio",
typeof(float),
typeof(MyMasterDetailPage),
(float)0.2);
public float WidthRatio
{
get
{
return (float)GetValue(WidthRatioProperty);
}
set
{
SetValue(WidthRatioProperty, value);
}
}
其次,尝试创建我们自己的渲染器,而不是使用表单的默认渲染器。我发布了关于我自己的渲染器的源代码here。在本课程中,我使用widthRatio
更改主人的宽度。可以在以下位置设置此属性:
void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
{
...
else if(e.PropertyName == "WidthRatio")
{
widthRatio = ((MyMasterDetailPage)Element).WidthRatio;
}
}
最后,创建继承上面渲染器的自定义渲染器,如:
[assembly: ExportRenderer(typeof(MyMasterDetailPage), typeof(MyMasterDetailPageRenderer))]
namespace MasterDetailDemo.iOS
{
public class MyMasterDetailPageRenderer : MyPhoneMasterDetailRenderer
{
}
}
您可以在表单WidthRatio
中设置属性MasterDetailPage
的值,以便立即更改宽度。您可以运行我的演示来测试它。
此外,如果您想在Android上执行此操作,请参阅this thread。