如何从Xamarin Forms基类页面中继承视图?

问题描述 投票:0回答:1

这真让我发疯。我正在尝试从我创建的基本SettingsPage继承,但是它不起作用,而且在任何地方都找不到如何执行此操作的示例。我发现的所有示例都涉及继承视图模型和其他非可视元素。特别是,我不确定您对派生页面中的“ Content =”怎么做,因为基础页面已经设置了“ Content =“。关于继承的MS doco表示您不继承构造函数,但可以使用:base()从其继承。

我整理了一个颜色方案选择器(在amporis.xamarin.forms.colorpicker上进行了扩展),我希望将其用作其他设置页面的基础(在我想要颜色方案选择器和其他应用程序的应用程序中设置)。我有一个类库CSettings,如果直接加载CSettingsPage,则CSettingsPage可以很好地加载(包括Content = SettingsGrid,所有内容首先都加载到其中)-一切都是“公共的”。然后,我有一个TestBed应用程序,并尝试创建TBSettingsPage。在顶部,我有

namespace TestBed {
    public class TBSettingsPage : CSettingsPage {...

(并且我当然引用了DLL),并且我尝试使用构造函数进行以下3种变化...

public TBSettingsPage():base() {}
public TBSettingsPage():base() { Content=SettingsGrid; }
public TBSettingsPage() { Content=SettingsGrid; }

每次我得到...

“抛出异常:Xamarin.Forms.Platform.UAP.dll中的'System.Runtime.InteropServices.COMException'错误HRESULT E_FAIL已从对COM组件的调用返回。在Xamarin.Forms初始化中。

...这不是非常有用的错误消息。它基本上说“不正确”,而没有告诉我什么不正确或如何解决(使用谷歌搜索会遇到各种各样的情况,没有一种情况适用于我想做的事情)。 :-(

谁能告诉我如何从已经有视图的BasePage派生出来? (我看到了一个技巧,直到页面构建完成后才使其可见,然后使其可见,但这无济于事)。还是为我提供一个实现此类功能的示例?

注:我的UI使用C#,而不是XAML。如果相关的话,这也在UWP中。

谢谢,唐纳德。

根据要求,这是OnLaunched中的代码

受保护的覆盖无效OnLaunched(LaunchActivatedEventArgs e){

        Frame rootFrame = Window.Current.Content as Frame;

        // Do not repeat app initialization when the Window already has content,
        // just ensure that the window is active
        if (rootFrame == null)
        {
            // Create a Frame to act as the navigation context and navigate to the first page
            rootFrame = new Frame();

            rootFrame.NavigationFailed += OnNavigationFailed;

            Xamarin.Forms.Forms.Init(e);

            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }

            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }

        if (rootFrame.Content == null)
        {
            // When the navigation stack isn't restored navigate to the first page,
            // configuring the new page by passing required information as a navigation
            // parameter
            rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
        // Ensure the current window is active
        Window.Current.Activate();
    }
c# inheritance xamarin.forms derived-class content-pages
1个回答
0
投票

所以我最终发现这全是由于UWP中的一个错误给了我红色的鲱鱼-参见https://github.com/xamarin/Xamarin.Forms/issues/9335。正确的语法是我说的第一个语法-即public TBSettingsPage():base() {}-但UWP错误阻止我看到它的正确性(因为我的应用程序仍然崩溃)。值得庆幸的是,现在正在研究此错误,并且我知道正确的语法后,我可以继续编码。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.