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

时间:2015-07-31 15:50:18

标签: c# xaml constructor xamarin.forms

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

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

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

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

MyContentViewPage

但是,我不能这样包装,Visual Studio告诉我没有无参数构造函数。现在我想知道是否甚至可以在XAML内实例化我的自定义页面?

1 个答案:

答案 0 :(得分:2)

首先,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