gpt4 book ai didi

c# - Xamarin : Open page from string

转载 作者:行者123 更新时间:2023-11-30 15:21:19 25 4
gpt4 key购买 nike

我刚开始学习使用 Xamarin 和 C# 进行编程,但我真的很难回答这个问题。

我有一个主细节应用程序。在我的母版页中,我想轻松添加链接到详细信息页面的按钮。为此,我想制作一个可以使用两个参数调用的方法:按钮文本和链接到按钮的详细信息页面。

所以基本上:

public class MainLink : Button
{
public MainLink(string name,string page)
{
Text = name;
Command = new Command(o => {
App.MasterDetailPage.Detail = new NavigationPage(new page);
App.MasterDetailPage.IsPresented = false;
});
}
}

这就是我目前所拥有的。但是行:

App.MasterDetailPage.Detail = new NavigationPage(new page);

当然不行。

当我已经知道页面名称时,如何将字符串转换为页面类型?

最佳答案

您还可以使用 awsome Activator.CreateInstance(),它接受一个 Type,这将是您的页面。

为了从 stringType,您可以做以下两件事之一。要么尝试单独使用 string 获取类型(我实际上没有在 Xamarin Forms 中尝试过),如下所示:

Type somethingPageType = Type.GetType("SomethingPage");

或者您可以将页面 Type 传递到您的 Button 的构造函数中,然后像这样使用它:

....
public MainLink(string name,string page, Type pageType) {
....
}

所以把它们放在一起,要么:

public class MainLink : Button
{
public MainLink(string name,string page)
{
Text = name;
Command = new Command(o => {
Type pageType = Type.GetType(page);

App.MasterDetailPage.Detail = new NavigationPage(Activator.CreateInstance(pageType) as Page);
App.MasterDetailPage.IsPresented = false;
});
}
}

或者:

public class MainLink : Button
{
public MainLink(string name, Type pageType)
{
Text = name;
Command = new Command(o => {
App.MasterDetailPage.Detail = new NavigationPage(Activator.CreateInstance(pageType) as Page);
App.MasterDetailPage.IsPresented = false;
});
}
}

不过要记住两件事。首先是,如果您的页面将参数带入页面的构造函数,您将需要使用 Activator.CreateInstance() 的重载来使其工作。

此外,如果您使用 Xamarin 链接器删除未使用的内容,它可能会弄乱此方法,因此您需要专门告诉链接器不要理会您的反射代码,iOSAndroid

我们不链接所有代码,只链接 SDK 程序集,因此我们不必担心链接器问题,但看起来您可以在 iOS 上使用以下代码来修复它(尽管我没有实际测试过下面的代码) :

在您的 iOS 项目中创建一个名为 whatever 的 .cs 文件(例如 LinkerIncludes.cs)并添加以下代码:

public class LinkerIncludes {
public void Include() {
var x = new System.ComponentModel.ReferenceConverter (typeof(void));
}
}

关于c# - Xamarin : Open page from string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37774243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com