2017-05-25 1 views
0

J'ai décidé de créer une page de base pour mon projet WPF. Lorsque je crée la page de base et une page héritée dans l'espace de noms du projet, cela fonctionne, mais lorsque je crée un dossier nommé Pages dans le projet et la page de base et une page héritée dans le dossier et son espace de noms n'existe pas dans l'espace de noms "clr-namespace: WpfApplication2.Pages".Page de base wpf. Le nom X n'existe pas dans l'espace de noms Y

Ceci est la page de base. C'est juste une classe ordinaire sans XAML.

namespace WpfApplication2.Pages 
{ 
    public class BasePage : Page 
    { 
    } 
} 

Le fichier de page hérité .cs

namespace WpfApplication2.Pages 
{ 

    public partial class Page1 : BasePage 
    { 
     public Page1() 
     { 
     InitializeComponent(); 
     } 
    } 
} 

La première ligne de la page héritée. La partie que je change de Page à locale: BasePage. Cela provoque l'erreur.

<local:BasePage x:Class="WpfApplication2.Pages.Page1" 
    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:WpfApplication2.Pages" 

Screenshot demandé par Ed Plunkett:

Screenshot of the project explorer using Page as a rootElement in Page1.xaml

+0

J'ai été en mesure d'obtenir ce code exact pour fonctionner. Mon soupçon est qu'il y a quelque chose d'autre qui se passe. Avez-vous * créé * 'Page1' dans le dossier' Pages', ou l'avez-vous déplacé? Le déplacer là pourrait créer des ravages. –

+0

Je l'ai créé à l'intérieur. C'est BasePage 'using System; en utilisant System.Collections.Generic; en utilisant System.Linq; en utilisant System.Text; en utilisant System.Threading.Tasks; en utilisant System.Windows.Controls; WpfApplication4.Pages espace de noms { Classe publique BasePage: page {} } '' – Myoxidae

+0

Page1.xaml.cs using System; en utilisant System.Collections.Generic; en utilisant System.Linq; en utilisant System.Text; en utilisant System.Threading.Tasks; en utilisant System.Windows; en utilisant System.Windows.Controls; en utilisant System.Windows.Data; en utilisant System.Windows.Documents; en utilisant System.Windows.Input; en utilisant System.Windows.Media; en utilisant System.Windows.Media.Imaging; en utilisant System.Windows.Navigation; en utilisant System.Windows.Shapes; namespace WpfApplication4.Pages { public partial class Page1: BasePage { Page1 (public) { InitializeComponent(); } } } ' – Myoxidae

Répondre

0

Je commence à soupçonner le problème est que vous essayez de créer Page1 comme ceci:

<local:Page1 /> 

. ..mais dans un fichier XAML où local est WpfApplication1 plutôt que WpfApplication1.Pages. MainWindow, par exemple. Quand je fais cela, je vois le « nom ... n'existe pas » Erreur:

The name "Page1" does not exist in the namespace "clr-namespace:WpfApplication1". WpfApplication1 C:\Users\edplunkett\Documents\Visual Studio 2015\Projects\Test2\WpfApplication1\MainWindow.xaml 14

Dans ce cas, il suffit de définir une autre xmlns pour WpfApplication1.Pages:

<Window 
    x:Class="WpfApplication1.MainWindow" 
    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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication1" 
    xmlns:pages="clr-namespace:WpfApplication1.Pages" 
    mc:Ignorable="d" 
    Title="MainWindow" 
    Height="350" 
    Width="525" 
    > 
    <pages:Page1 
     /> 
</Window> 

Désolé, je fait perdre votre temps ruelles aveugles ici.

+0

Je ne comprends pas votre réponse. Quel est l'élément racine et en utilisant Page comme élément racine? Que veux-tu dire par là? – Myoxidae

+0

Je reçois L'espace de noms 'WpfApplication2.Pages' contient déjà une définition de 'BasePage' et un type 'Page1' définit déjà un membre appelé '.ctor' avec les mêmes erreurs de types de paramètres en utilisant Page comme élément racine. Le problème est que cela fonctionne correctement lorsque je crée la BasePage et Page1 dans l'espace de noms du projet et cela ne fonctionne pas dans un dossier. – Myoxidae

+0

J'ai créé un nouveau projet et maintenant je ne reçois aucune erreur, mais l'application ne commencera pas à dire les erreurs de construction ... Cela arrive quand j'ai des problèmes générés par build + IntelliSense, quand je le change pour construire seulement I Je reçois une déclaration partielle de 'Page1' ne doit pas spécifier différentes classes de base lorsque l'élément racine dans Page1.xaml est Page et quand j'utilise localhost: BasePage comme élément racine que je reçois BasePage n'existe pas dans l'espace de noms "clr-namespace: WpfApplication3.Pages "on build + IntelliSense – Myoxidae