嵌套视图未显示Xamarin表单

时间:2017-10-22 18:25:26

标签: c# xaml xamarin.forms

我希望能够在MainPage.xaml中显示LessonView.xaml。 以下是我的尝试。

我错过了一些不会显示的重要内容吗?

MainPage.xaml中

 <?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:local="clr-namespace:KanjiStudy"
                 x:Class="KanjiStudy.MainPage"
                 xmlns:views="KanjiStudy.View.LessonView">
        <ContentPage.Content>
            <StackLayout Orientation="Vertical">
                <Label Text="Welcome to Xamarin.Forms!"
                    VerticalOptions="CenterAndExpand" 
                    HorizontalOptions="CenterAndExpand" />
                <views:View.LessonView>
                </views:View.LessonView>    
                <StackLayout Margin="0,0,0,20" Padding="20,0,20,0" VerticalOptions="End" HorizontalOptions="Center" Orientation="Horizontal">
                    <Button Margin="20,0,50,20" FontSize="Large" HorizontalOptions="Start" Text="Study" >
                    </Button>
                    <Button Margin="50,0,20,20" FontSize="Large" Text="Test" Clicked="Button_Clicked">
                    </Button>
                </StackLayout>  
            </StackLayout>    
        </ContentPage.Content>
    </ContentPage>

LessonView.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="KanjiStudy.View.LessonView">
  <ContentView.Content>
      <StackLayout>
          <Label Text="i am a view" />
      </StackLayout>
  </ContentView.Content>
</ContentView>

2 个答案:

答案 0 :(得分:1)

MainPage.xaml中的名称空间声明应该只包含视图视图所在的命名空间: xmlns:views="KanjiStudy.View">

然后在显示视图时,使用xmlns名称和C#类名称(但不是C#名称空间名称),如下所示:

            <views:LessonView>
            </views:LessonView>    

考虑它的方法是XAML解析器将通过从xmlns声明中获取命名空间路径并在其中查找类名来为视图创建类的实例。

换句话说,在原始代码中,它将尝试查找命名空间KanjiStudy.View.LessonView。由于视图的完整命名空间+类名是KanjiStudy.View.LessonView,因此将命名空间部分放在xmlns中,将类名放在XML标记的所需视图上。

答案 1 :(得分:0)

我能够找到一个wpf教程,它在这里做了类似的事情http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html

MainPage.xaml中 这需要使用以下命名空间
的xmlns:本地= “CLR-名称空间:KanjiStudy.View” &GT;

而不是

的xmlns:视图= “KanjiStudy.View.LessonView” &GT;

然后在身体中我可以拉入多个lessonView对象

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"            
             x:Class="KanjiStudy.MainPage"
             xmlns:local="clr-namespace:KanjiStudy.View">
    <ContentPage.Content>
        <StackLayout Orientation="Vertical">
            <StackLayout Orientation="Vertical" VerticalOptions="StartAndExpand">
                <Label Margin="0,20,0,0" Text="Grade 1"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
                <StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
                    <local:LessonView  Margin="10,10,10,10">
                    </local:LessonView>
                    <local:LessonView  Margin="10,10,10,10">
                    </local:LessonView>
                    <local:LessonView  Margin="10,10,10,10">
                    </local:LessonView>
                </StackLayout>
            </StackLayout>
            <StackLayout Margin="0,0,0,20" Padding="20,0,20,0" VerticalOptions="End" HorizontalOptions="Center" Orientation="Horizontal">
                <Button Margin="20,0,50,20" FontSize="Large" HorizontalOptions="Start" Text="Study" >
                </Button>
                <Button Margin="50,0,20,20" FontSize="Large" Text="Test" Clicked="Button_Clicked">
                </Button>
            </StackLayout>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>