2016-01-24 2 views
3

У меня есть несколько страниц, и я хочу показать один и тот же заголовок на каждой странице без копирования &, вставляя его несколько раз: он очень не поддается.XAML Повторное использование блока разметки

<!-- #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 --> 

Каковы возможности сделать этот блок разметки повторно используемым? Например, было бы неплохо написать что-то вроде этого:

<MyHeader Grid.Row="0" PageTitle="Page1" /> 
+3

Создать 'UserControl'? – Clemens

+0

Сделать его ресурсом –

+0

@HamletHakobyan Но будьте осторожны с элементами пользовательского интерфейса в качестве ресурсов. Вы должны хотя бы установить значение «x: Shared» равным false. – Clemens

ответ

4

Пользовательский контроль является опцией.

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> 
Смежные вопросы