XAML 重复使用一块标记

4

如果我有多个页面,希望在每个页面上都显示相同的“页眉”,而不需要复制和粘贴多次:这样做非常难以维护。

    <!--  #region Header  -->

    <Grid Grid.Row="0">

        <Rectangle Style="{StaticResource HeaderBackground}" />
        <TextBlock 
                   Style="{StaticResource PageTitle}"
                   Text="Page1" />
        <Button 
                Content="Settings"
                Command="{Binding GotoSettingsPage}" />

    </Grid>

    <!--  #endregion Header  -->

这个标记块如何才能重复使用呢?例如,我们希望像这样编写代码:
```html ```
请问有哪些选项可供选择?
<MyHeader Grid.Row="0" PageTitle="Page1" />

3
创建一个UserControl - Clemens
@HamletHakobyan 但是在处理UI元素资源时要小心。你至少应该将 x:Shared 设置为false。 - Clemens
@Clemens 这要看情况。 - Hamlet Hakobyan
1个回答

5

用户控件是一种选项。

MyHeader.Xaml:

<UserControl
    x:Class="App1.MyHeader"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid>
        <Rectangle Style="{StaticResource HeaderBackground}" />
        <TextBlock x:Name="Title"
                   Style="{StaticResource PageTitleStyle}"
                   Text="" />
        <Button Content="Settings"
                Command="{Binding GotoSettingsPage}"/>
    </Grid>
</UserControl>

MyHeader.Xaml.cs:

using Windows.UI.Xaml.Controls;

namespace App1
{
    public sealed partial class MyHeader : UserControl
    {
        public MyHeader()
        {
            this.InitializeComponent();
        }

        public string PageTitle
        {
            get { return Title.Text; }
            set { Title.Text = value ?? ""; }
        }
    }
}

MainPage.Xaml:

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <local:MyHeader PageTitle="Page 1"/>
    </Grid>
</Page>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接