2016-05-03 7 views
0

私はWPFアプリケーション開発の新機能です。それを拡張するすべてのページの共通ヘッダーを含む基本ページを作成するにはどうすればよいですか?

私は単純なWPFアプリケーションを作成しています。ここでは、1つのウィンドウとUIが提供するクリックボタンでページが変更されます。

ここで私が設計しているすべてのページに共通のヘッダーを追加するベースページを作成する方法を説明します。

このBasePageを拡張するようなものはありますか?すべてのコントロールはこのページにありますか?

たとえば、My appタイトルは、すべてのページのXAMLに追加したくないすべてのページに表示されます。

私の想定自体が間違っている場合は教えてください。

編集:

私のBasePageクラス:私のホームページの

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から生成されたページを使用できません」などのエラーが表示されるためです。

+0

何を試しましたか? – Amine

+0

こんにちは@Amine、お返事ありがとうございます。私は[this](http://stackoverflow.com/a/40868/651210)のようにしてみました。しかし、それは私の要求を満たすことができません。 –

+0

あなたがしたいことは複雑ではありません。しかし、私たちはあなたのところで仕事をするためにここにいるわけではありません。努力してコードを共有すれば、私たちはあなたを助けます。 – Amine

答えて

1

希望することを行うにはいくつかの方法があります。 メニュー(ナビゲーション用)、テキストボックス(ヘッダー)、グリッド(ホスト)の3つのメインコントロールを持つウィンドウを作成しました メニューをクリックすると、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> 
+0

こんにちは@Amineはあなたの迅速な返答に感謝します。これは私の問題の一つを解決します。たとえば、フォームページの下部に、作成、キャンセルなどの一般的な操作を必要とするフォームを作成するフォームで拡張できるBaseFormPageを作成する必要があるとします。これどうやってするの? –

関連する問題