2011-03-23 2 views
1

En utilisant le code suivant:WPF XAML Namespace question

<ad:DockingManager x:Class="Main.AvalonDock.Views.AvalonDockView" 
      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:ad="clr-namespace:AvalonDock;assembly=AvalonDock" 
      xmlns:cal="http://www.codeplex.com/prism" 
      mc:Ignorable="d" 
      d:DesignHeight="293" d:DesignWidth="504"> 
    <ad:ResizingPanel Margin="0,10,0,10" Orientation="Horizontal" > 
     <ad:DockablePane cal:RegionManager.RegionName="MainLeftRegion" Name="leftDockablePane" /> 
     <ad:DocumentPane cal:RegionManager.RegionName="MainCenterRegion" Name="mainDocumentPane" /> 
     <ad:DockablePane cal:RegionManager.RegionName="MainRightRegion" Name="rightDockablePane" /> 
    </ad:ResizingPanel> 
</ad:DockingManager> 

Mon nom de projets est Main.AvalonDock qui utilise le contrôle de AvalonDock. Il ne sera pas compilé en raison d'une divergence entre l'espace de noms de l'annonce et l'espace de noms du projet. Y at-il un travail autour?

Heres l'erreur:

The type or namespace name 'DockablePane' does not exist in the namespace 'Main.AvalonDock' (are you missing an assembly reference?)

+2

Avez-vous essayé de mettre un point-virgule dans le nom du projet pour voir si c'est le problème? Changez votre nom de projet en "Main.Avalon_Dock" temporairement et voyez si c'est le problème. Je ne pense pas qu'il y ait moyen de changer ou de modifier la façon dont les espaces de noms XAML sont résolus. –

+0

@Josh G - Oui, cela corrige le problème. C'est définitivement lié aux noms étant trop similaires. –

+0

Le problème est cependant que je suis têtu et je ne veux pas avoir à renommer mon projet pour accueillir un contrôle tiers –

Répondre

2

Si vous regardez les AvalonDockView.g.cs (ou AvalongDockView.g.vb) dans le dossier de vos projets, vous verrez la question sous-jacente.

Fondamentalement, vous finiriez avec quelque chose comme:

using Main.AvalonDock.Views { 
    internal AvalonDock.DockablePane leftDockablePane; 
    // ... 
} 

En utilisant les spécifications de résolution de type C#, le AvalonDock décide de votre espace de noms, et non celui de l'assemblée AvalonDock.