在 XAML 内实例化用代码编写的自定义页面

Instantiate custom Page written in code within XAML

首先,一个小警告 - 我们在这里谈论 Xamarin,不幸的是,不是 WPF。我正在将现有的基于代码的页面转换为具有跨平台 Xamarin FormsXAML 表示。我有以下形式的 class:

public class ExtendedNavigationPage : BaseNavigationPage
{      
    public ExtendedNavigationPage(Xamarin.Forms.Page root)
        :base(root)
    {
    }
}

所以现在我需要在 XAML 内使用它。我最初的想法是我可以像这样传递构造函数的 Page 参数:

<page:ExtendedNavigationPage>
  <view:MyContentView/>
</page:ExtendedNavigationPage>

其中 MyContentViewPage

但是,我不能这样包装,Visual Studio告诉我没有无参数的构造函数。现在我想知道是否有可能在 XAML?

内实例化像我这样的自定义页面

首先,NavigationPage 没有 "View" 属性。在其构造函数中包含一个 Page 是常见的做法,我猜这可能会导致您关于无参数构造函数不存在的错误。

我还必须提到,在大多数情况下,在 XAML 中实例化 NavigationPages 是不必要的。现在我已经解决了这个问题,下面是您的操作方法:

<?xml version="1.0" encoding="UTF-8" ?>
<NavigationPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="My.Shared.Page">
    <x:Arguments>
        <Page>
            <ScrollView>
                <StackLayout x:Name="layout" Orientation="Vertical" VerticalOptions="Start" HorizontalOptions="Center">  
                <ActivityIndicator x:Name="activity"></ActivityIndicator>                                                   
                </StackLayout>  
            </ScrollView>    
        </Page>    
    </x:Arguments>
</NavigationPage>

这里重要的是第四行:

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

xaml 2009 支持此行为。

有关此主题的更完整讨论,请参阅 this forum post。 在此归功于 @Stephane Delcroix