如何创建一个基页,其中包含扩展所有页面的公共标题?

时间:2016-05-03 13:29:35

标签: c# wpf xaml wpf-controls

我是WPF应用程序开发的新手。

我正在编写一个简单的WPF应用程序,其中我只有一个窗口,页面将在UI中提供的单击按钮上更改。

这里如何有基页,我将添加一些标题,这对我正在设计的所有页面都是通用的。

有没有像扩展BasePage那样的所有控件都会到达这个页面?

例如,我的应用标题应该出现在我不想在所有页面的XAML中添加的所有页面中。

如果我的假设错了,请告诉我。

编辑:

我的基页:

public class BasePage : Page
{        
    public BasePage()
    {
    }
}

我的主页的XAML:

<local:BasePage x:Class="CCS.ui.HomePage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:local="clr-namespace:My.ui"
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
  Title="HomePage">

<StackPanel>
    <WrapPanel  Name="root"></WrapPanel>
    <Button Name="Home" Content="Home"></Button>
    <Button Name="Home3" Content="Home2"></Button>
</StackPanel>

这里我不确定在哪里编写应该添加到BasePage的标题控件。因为如果从XAML创建BasePage它显示错误,如“无法使用从XAML生成的页面”。

1 个答案:

答案 0 :(得分:2)

有几种方法可以做你想要的。这里我举一个小例子: 我创建了一个带有3个主要控件的Window,Menu(用于导航),TextBox(Header)和Grid(Host) 当我单击菜单时,我在HostGrid中添加了一个UserControl。

MainWindow.xaml

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Menu>
        <MenuItem Header="Home" x:Name="Home" Click="MenuItem_Click"/>
        <MenuItem Header="Page 1" x:Name="Page1" Click="MenuItem_Click"/>
        <MenuItem Header="Page 2" x:Name="Page2" Click="MenuItem_Click"/>
    </Menu>
    <TextBlock Grid.Row="1" Text=" Header" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" Height="40"/>
    <Grid Grid.Row="2" x:Name="HostGrid"></Grid>
</Grid>

MainWindow.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        HostGrid.Children.Clear();
        switch(((MenuItem)e.OriginalSource).Name)
        {
            case "Home":
                HostGrid.Children.Add(new UserControlHome());
                break;
            case "Page1":
                HostGrid.Children.Add(new UserControl1());
                break;
            case "Page2":
                HostGrid.Children.Add(new UserControl2());
                break;
        }
    }
}

UserControlHome.xaml

<Grid Background="Crimson">
    <TextBlock Text="Home" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>

UserControl1.xaml

<Grid Background="Lavender">
    <TextBlock Text="Page 1" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>

UserControl2.xaml

<Grid Background="Ivory">
    <TextBlock Text="Page 2" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>