如何制作可绑定的视图

时间:2019-03-24 11:55:20

标签: xamarin xamarin.forms custom-controls

我尝试制作自定义视图,仅作为标题和正文,它们都是视图,例如能够包含StackLayout。 在使用此自定义视图的页面的Xaml中,我想编写如下内容:

                <Controls:MyBox>
                    <Controls:MyBox.Header>
                        <StackLayout>

                        </StackLayout>
                    </Controls:MyBox.Header>
                    <Controls:MyBox.Body>
                        <StackLayout>

                        </StackLayout>
                    </Controls:MyBox.Body>
                </Controls:MyBox>

我在xaml中的自定义控件是这样的:

<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="My.Controls.MyBox"
             x:Name="This"
             Padding="10"
             Spacing="0"
             >
    <StackLayout>
        <StackLayout>
            <View x:Name="Header" />
        </StackLayout>
        <StackLayout>
            <View x:Name="Body" />
        </StackLayout>
    </StackLayout>
</StackLayout>

如何制作Controls:MyBox.Header标记的内容与<View x:Name="Body" />的内容链接

1 个答案:

答案 0 :(得分:0)

在Xamarin Forms中,它没有用户控件,类似于WPF。但是您可以通过使用ContentView来实现类似的目的。

1。在ContentView中创建标题。

<?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="App4.UserControl">
  <ContentView.Content>
      <StackLayout BackgroundColor="Red">
          <Label Text="This is header" />
      </StackLayout>
  </ContentView.Content>
</ContentView>
  1. 创建一个ContentPage并引用Header ContentView的命名空间 然后使用该控件将控件放置在页面上的任何位置

    <?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:App4"
    
        x:Class="App4.MainPage" BackgroundColor="LightSteelBlue">
        <ContentPage.Content>
            <StackLayout>
                <!-- Header-->
                <StackLayout>
                    <local:UserControl />
                </StackLayout>
    
                <!-- body -->
                <StackLayout BackgroundColor="Blue">
                    <Label Text="This is body"></Label>
                </StackLayout>
            </StackLayout>
        </ContentPage.Content
    </ContentPage>