【问题标题】:Control 2 different pages UI from within one single class从一个类中控制 2 个不同的页面 UI
【发布时间】:2022-12-18 08:53:06
【问题描述】:

我知道这个问题可能是无稽之谈,但我已经思考了一段时间。我正在开发一个 Xamarin Forms 应用程序,它可以在 Windows 和 Android 上运行,并且它们共享大部分代码。但是,由于某些原因,有一个特定的页面需要特定于平台(因为 UI 元素分布使应用程序看起来很奇怪)。随着代码行数的增加,而且它们几乎相同,我想到了创建一个单独的脚本来处理两个页面的逻辑,我只需从每个页面调用这些新方法即可。问题来了,因为我想修改一些 UI 元素(我之前为每个 UI 元素创建了一些 getter),并且由于每个页面都有不同的类名,比如 Page1 和 Page2,有什么办法可以根据运行应用程序的平台,在运行时设置一个可以采用 Page1 或 Page2 类型的通用变量?

我试过的

我尝试过共享项目和编译指令

#if WINDOWS_UWP
...
#elif ANDROID
...
#endif

但是我不知道是我不知道如何正确使用它,还是根本不起作用。在编译时,它表示此通用变量没有属于 Page1 和 Page2 类的任何变量的定义。

我的目标是拥有这样的东西

class Page1{
    int SameVariableName;
}

class Page2{
    int SameVariableName
}

class GenericClass{
    //Check if Platform is Windows or Android
    if (Windows) { Page1 pageVariable = new Page1();}
    else if (Android) { Page2 pageVariable = new Page2();}

    pageVariable.SameVariableName = (...);
}

问题是,由于 pageVariable 分配直到运行时才完成,它会产生大量编译错误,例如 pageVariable 不包含 SameVariableName 的定义

非常感谢您阅读本文并试图帮助我

【问题讨论】:

  • 创建两个页面都继承的公共接口

标签: c# android xamarin.forms uwp conditional-compilation


【解决方案1】:

看起来你应该反过来做。由于大部分代码完全相同,因此应该有一个 Page 类。

然后,您实际上可以将 Page1 或 Page2 转换为 Page 类,以便您的通用类仅处理 Page 类而不必处理 Page1 或 Page2。您继续处理代码,然后如果您需要将它们发回,请转换为其他方式。

但老实说,做你想做的事情的真正方法是学习和使用 C# 接口,使用接口你可以创建一个父类来战略性地处理两个子类,这个问题甚至在成为实际问题之前就已经解决了。您将拥有一个 Page 类,并且 Page1 和 Page2 都将从 Page 类继承。你的编译器不会这样抱怨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多