如何在XAML中创建主布局模板

时间:2015-12-10 04:53:26

标签: xaml templates layout windows-10 uwp

我是Windows开发的新手。我制作了一个简单的Windows应用程序,它有几页,每个页面在XAML中都有类似的布局。像这样:

enter image description here

每个页面分为3个部分。 A将具有标题,B是插入内容的位置,C是其他内容。我的问题是:构建通用布局模板的最简单方法是什么,以便我可以为每个页面重用它?有可能吗?

例如,我有一个带有此布局的MainTemplate.xaml文件:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
</Grid>

然后我的Page1.xaml将加载MainTemplate,因此我不必将相同的布局复制并粘贴到我的每个页面中。我尝试过在网上寻找,但解决方案正在我脑海中浮现。我想知道是否有一种简单的方法可以像使用网页那样做。谢谢。

1 个答案:

答案 0 :(得分:3)

执行此操作的一种可行方法是将UserControlContentPresenter一起使用。例如:

添加名为UserControl的{​​{1}}。在XAML中,使用MainTemplate设置布局并将其绑定到代码隐藏中定义的ContentPresenter

DependencyProperty

在代码隐藏中,设置<UserControl x:Class="UWPTest.MainTemplate" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="using:UWPTest" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="300" d:DesignWidth="400" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <ContentPresenter Content="{x:Bind Title}" /> <ContentPresenter Grid.Row="1" Content="{x:Bind Main}" /> <ContentPresenter Grid.Row="2" Content="{x:Bind Stuff}" /> </Grid> </UserControl> ,以便我们可以使用它们在其他页面中设置内容。

DependencyProperty

在此之后,我们可以使用其他页面中的public sealed partial class MainTemplate : UserControl { public MainTemplate() { this.InitializeComponent(); } public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(object), typeof(MainTemplate), new PropertyMetadata(null)); public object Title { get { return GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } public static readonly DependencyProperty MainProperty = DependencyProperty.Register("Main", typeof(object), typeof(MainTemplate), new PropertyMetadata(null)); public object Main { get { return GetValue(MainProperty); } set { SetValue(MainProperty, value); } } public static readonly DependencyProperty StuffProperty = DependencyProperty.Register("Stuff", typeof(object), typeof(MainTemplate), new PropertyMetadata(null)); public object Stuff { get { return GetValue(StuffProperty); } set { SetValue(StuffProperty, value); } } } 来重用总体布局。例如,在&#34; MainPage.xaml&#34;:

中使用它
UserControl

然后&#34; MainPage&#34;看起来像下面的: enter image description here