在xamarin表单应用程序中, 我想改变左侧菜单的宽度对于Android应用程序。
我尝试根据以下代码更改宽度
With Acon1
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" + ThisWorkbook.Sheets(1).Range("V24").Value & _
";User ID=admin;Password=" 'Password
.Open
End With
现在是Android应用程序代码。
class MyMasterDetailPage : MasterDetailPage
{
public static readonly BindableProperty DrawerWidthProperty = BindableProperty.Create<MyMasterDetailPage, int>(p => p.DrawerWidth, default(int));
public int DrawerWidth
{
get { return (int)GetValue(DrawerWidthProperty); }
set { SetValue(DrawerWidthProperty, value); }
}
}
上面的代码不起作用。 请分享关于如何更改MasterDetailPage for android ap?
的宽度的想法答案 0 :(得分:1)
您提供的代码实际上有效,问题是this.Element
现在没有公开,通常我们可以通过覆盖MyMasterDetailPage
方法来获取OnElementChanged
的实例,问题是AddView
1}}此处的调用时间早于OnElementChanged
。
目前我找不到在BindableProperty
中定义MyMasterDetailPage
的优雅方式,并在AddView
事件中获取此属性的值,但我们可以直接在渲染器的代码中设置它例如:
if (firstDone)
{
LayoutParams p = (LayoutParams)child.LayoutParameters;
p.Width = 300;
base.AddView(child, p);
}
else
{
firstDone = true;
base.AddView(child);
}
如果我能在这里找到更好的解决方案,我会回来更新这个答案。
答案 1 :(得分:1)
[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.MasterDetailPage), typeof(MyMasterDetailRenderer))]
class MyMasterDetailRenderer : MasterDetailRenderer
{
bool firstDone;
public override void AddView(View child)
{
if (firstDone)
{
var visualElementRenderer = this as IVisualElementRenderer;
var element = visualElementRenderer.Element;
MyMasterDetailPage page = (MyMasterDetailPage)element;
LayoutParams p = (LayoutParams)child.LayoutParameters;
p.Width = page.DrawerWidth;
base.AddView(child, p);
}
else
{
firstDone = true;
base.AddView(child);
}
}
}