2009-03-21 6 views
2

Ok, donc j'ai une fenêtre dans WPF. Ajouter la ligne suivante à l'intérieur de celui-ci:WPF: Espace de noms personnalisé XAML

xmlns:controls="clr-namespace:mCubed.Controls" 

Cette compile et fonctionne très bien, mais le concepteur Visual Studio me donne cette erreur:

Could not load file or assembly 'mCubed, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

Lorsque je supprime cette ligne de la fenêtre, il compile et fonctionne très bien et le concepteur de Visual Studio fonctionne comme un charme!

Je suis confus quant à pourquoi cette ligne brise le concepteur? Cela se produit REGARDLESS si j'ai placé la ligne suivante dans le corps du document XAML.

<controls:MyControl/> 

Tous mes fichiers .cs sont dans le même projet VS. J'ai un espace de noms mCubed qui contient ma classe mCubedWindow habilement nommée. J'ai toutes mes classes de contrôles définies dans l'espace de noms mCubed.Controls. Ne me dites PAS que c'est un problème d'assemblage, TOUS MES FICHIERS SONT DANS LE MÊME PROJET VS!

Répondre

5

Pas un problème d'assemblage, juste un problème de concepteur. Le concepteur VS WPF en 2008 est au mieux primitif - complètement inutile IMHO. Je l'éteins complètement et utilise l'éditeur XML à la place. Espérons que les choses vont s'améliorer radicalement en 2010.

2

MyControl est-il dans le même assemblage que la fenêtre? Si ce n'est pas le cas, vous devez inclure le nom de l'assembly dans la déclaration:

xmlns:controls="clr-namespace:mCubed.Controls;assembly=mCubed" 
+0

Son dans le même projet Visual Studio donc je suppose. Il compile et fonctionne sans problèmes, donc je ne pense pas que ce soit le problème. Il ne devrait même pas compiler si c'était le cas. – Nick

1

C'est un peu bizarre. J'ai développé plusieurs projets qui font exactement cela. Voici un projet fictif rapide, en un seul .exe:

D'abord, un UserControl avec deux boutons:

<UserControl x:Class="WpfApplication1.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid Width="30"> 
     <Button HorizontalAlignment="Left">A</Button> 
     <Button HorizontalAlignment="Right">B</Button> 
    </Grid> 
</UserControl> 

Maintenant, la fenêtre principale, avec mon contrôle grefferont:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:p="clr-namespace:WpfApplication1" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <p:UserControl1/> 
    </Grid> 
</Window> 

Aucun message d'erreur nulle part.

+0

J'ai mis mes contrôles personnalisés dans un dossier Controls dans mon projet si cela fait une différence. – Nick

0

Le code XAML est-il lâche (action de construction: aucune, aucun code) ou compilé (action de construction: page, peut-il contenir du code)?

Si le XAML est lâche ou si MyControl est dans un assemblage différent vous devez spécifier l'assemblage MyControl est, comme Daniel Pratt a déclaré:

 
xmlns:controls="clr-namespace:mCubed.Controls;assembly=mCubed" 

Assurez-vous que l'ensemble mCubed et ses dépendances (références) sont copié dans votre répertoire de sortie. Si ce n'est pas le cas, ajoutez mCubed comme référence au projet de démarrage.

Questions connexes