在 XAML 内实例化用代码编写的自定义页面
Instantiate custom Page written in code within XAML
首先,一个小警告 - 我们在这里谈论 Xamarin
,不幸的是,不是 WPF
。我正在将现有的基于代码的页面转换为具有跨平台 Xamarin Forms
的 XAML
表示。我有以下形式的 class:
public class ExtendedNavigationPage : BaseNavigationPage
{
public ExtendedNavigationPage(Xamarin.Forms.Page root)
:base(root)
{
}
}
所以现在我需要在 XAML
内使用它。我最初的想法是我可以像这样传递构造函数的 Page
参数:
<page:ExtendedNavigationPage>
<view:MyContentView/>
</page:ExtendedNavigationPage>
其中 MyContentView
是 Page
。
但是,我不能这样包装,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。
首先,一个小警告 - 我们在这里谈论 Xamarin
,不幸的是,不是 WPF
。我正在将现有的基于代码的页面转换为具有跨平台 Xamarin Forms
的 XAML
表示。我有以下形式的 class:
public class ExtendedNavigationPage : BaseNavigationPage
{
public ExtendedNavigationPage(Xamarin.Forms.Page root)
:base(root)
{
}
}
所以现在我需要在 XAML
内使用它。我最初的想法是我可以像这样传递构造函数的 Page
参数:
<page:ExtendedNavigationPage>
<view:MyContentView/>
</page:ExtendedNavigationPage>
其中 MyContentView
是 Page
。
但是,我不能这样包装,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。