Xamarin.Forms中CS0029错误:无法将ContentView转为Page
解决Xamarin.Forms中无法将ContentView赋值给MainPage的类型转换错误
先直接点出问题根源:你遇到的CS0029 Cannot implicitly convert type 'smiles.Gridtesst' to 'Xamarin.Forms.Page'错误,本质是类型不匹配——你的Gridtesst继承的是ContentView(这是UI组件,不是独立页面),而App的MainPage属性要求的是Page类型(比如ContentPage、NavigationPage这类可作为页面容器的类型),两者无法直接转换。
两种修复方案,按需选择:
方案1:将Gridtesst改为ContentPage(适合作为独立主页)
如果你本来就想把Gridtesst作为应用的主页,直接修改它的继承关系即可:
- 修改Gridtesst.xaml:把根节点从
<ContentView>替换为<ContentPage>,同步更新内容节点:
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="smiles.Gridtesst"> <ContentPage.Content> <StackLayout> <Label Text="Hello Xamarin.Forms!" /> </StackLayout> </ContentPage.Content> </ContentPage>
- 修改Gridtesst.cs:把基类从
ContentView改为ContentPage:
using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace smiles { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class Gridtesst : ContentPage // 修改此处基类 { public Gridtesst() { InitializeComponent(); } } }
修改完成后,你App.cs里的MainPage = new Gridtesst();就能正常运行了,因为此时Gridtesst已经是Page的子类。
方案2:保留ContentView,将其嵌入ContentPage(适合复用组件场景)
如果Gridtesst是你要复用的UI组件,不想改成页面,那可以把它放到一个新的ContentPage中作为内容:
直接修改App.cs的初始化代码:
public App() { InitializeComponent(); // 创建一个ContentPage容器,将Gridtesst作为它的内容 MainPage = new ContentPage { Content = new Gridtesst() }; }
当然你也可以新建一个独立的ContentPage XAML文件,在里面引用Gridtesst组件,效果完全一致。
小提醒
以后创建页面时,记得选择Content Page模板,而非自定义的ContentView——ContentView是用来做可复用的UI片段,不能直接作为应用的独立页面使用哦~
内容的提问来源于stack exchange,提问作者Daniel Ross
相关产品推荐
相关产品推荐

