我可以在Xamarin中使用控件模板之类的东西来包围新对象吗?

时间:2018-07-29 04:50:26

标签: xamarin xamarin.forms

我的应用程序包含被以下内容包围的对象:

<StackLayout HeightRequest="49" BackgroundColor="Red" Orientation="Vertical" Margin="0" >
    <Grid VerticalOptions="CenterAndExpand">
        <!-- XAML here -->
    </Grid>
</StackLayout>

我想这样做,这样就不必每次都在第一行,第二行,最后一行和最后一行的末尾输入XAML。

我可以使用类似控件模板的方法来避免这样做吗?如果可以,我将如何使用它?

2 个答案:

答案 0 :(得分:0)

是的,Xamarin还提供XAML中的控制模板功能。

在App.xaml中编写以下代码

<Application.Resources>
        <ResourceDictionary>
            <ControlTemplate x:Key="TealTemplate">
                <Grid>

                    <Label Text="Control Template Demo App"
                           TextColor="White"
                           VerticalOptions="Center" />
           </ControlTemplate>

        </ResourceDictionary>
    </Application.Resources> 

在ContentPage侧面调用模板

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="SimpleTheme.HomePage">
    <ContentView x:Name="contentView" Padding="0,20,0,0"
                 ControlTemplate="{StaticResource TealTemplate}">
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label Text="Welcome to the app!" HorizontalOptions="Center" />
            <Button Text="Change Theme" Clicked="OnButtonClicked" />
        </StackLayout>
    </ContentView>
</ContentPage>

答案 1 :(得分:0)

您将需要使用ContentPresenterControlTemplate的组合(如numpy.choose的注释中所述)

  

ContentPage(或ContentView)上,可以分配Content属性,也可以设置ControlTemplate属性。发生这种情况时,如果ControlTemplate包含一个ContentPresenter实例,则分配给Content属性的内容将由ContentPresenterControlTemplate中呈现。 / p>

<ControlTemplate x:Key="DefaultTemplate">
    <StackLayout HeightRequest="49" BackgroundColor="Red"
                 Orientation="Vertical" Margin="0">
        <Grid VerticalOptions="CenterAndExpand">
            <ContentPresenter /> <!-- This line is replaced by actual content -->
        </Grid>
    </StackLayout>
</ControlTemplate>

用法:

<ContentView ControlTemplate="{StaticResource DefaultTemplate}">
    <!-- XAML here (basically the view that is to be surrounded by above layout) -->
    <Label TextColor="Yellow" Text="I represent the content" />
</ContentView>