2010-09-24 3 views
1

J'ai une série de UserControls WPF dans une seule bibliothèque de classes. Il y a plusieurs niveaux aux contrôles et le plus haut niveau utilisera plusieurs contrôles de niveau inférieur. Certains contrôles de bas niveau importent des classes à partir d'autres DLL externes, puis utilisent ces classes dans les propriétés du contrôle. Le problème est que lorsque j'essaie de placer un de ces contrôles de niveau inférieur dans un contrôle de niveau supérieur, ils se trompent lorsqu'ils essayent de rendre dans le concepteur, indiquant qu'il ne peut pas trouver les assemblys de classe utilisés pour les propriétés. Ils fonctionneront bien s'ils sont déposés sur la fenêtre principale d'un exécutable et fonctionnent parfaitement en mode exécution, mais pas dans le concepteur. Pas la fin du monde ... mais une douleur royale.Le contrôle utilisateur WPF ne trouve pas d'assembly pendant la conception

Par exemple rapide:

using MyClassLibrary; 

public partial class MyControl : UserControl 
{ 
    public MyControl {} 

    public MyClass ClassInstance { get; set; } 
} 

Le code ci-dessus rendrait bien dans le concepteur lui-même, mais pas quand je tente d'utiliser ce contrôle à l'intérieur d'un autre contrôle de l'utilisateur. Je sais aussi que le même problème peut résulter des classes externes utilisées dans le constructeur, OnLoaded, etc (tout ce qui est exécuté par le concepteur) mais les avons déjà corrigées en vérifiant s'il est en mode Design et en désactivant ce code. C'est juste que je ne peux pas comprendre comment ne pas traiter les propriétés du contrôle.

Des idées?

+0

J'ai un projet de test dans lequel le concepteur WPF ne parvient pas à reconnaître un assembly qui utilise une DLL externe (non gérée), mais si je référence l'assembly dans le code, l'application fonctionne correctement à l'exécution. Je poserai ma question (similaire) et vous ferai savoir si j'obtiens une réponse qui pourrait vous être utile. –

Répondre

0

Avez-vous référé la classe dans le Xaml? Exemple:

xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" 
+0

Non ... pas dans l'un des contrôles. Lequel devrais-je faire et comment pourrais-je le référencer pour quelque chose qui est déjà dans les références des assemblées? (MyControl.dll par exemple ... ce n'est pas une chose de Microsoft) –

1

j'ai rencontré un problème similaire, et a travaillé autour d'elle en ayant le constructeur fait appeler dans une deuxième fonction qui a appelé le code dans la bibliothèque:

public WorkspacePanel() 
    { 
     InitializeComponent(); 
     if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
     { 
      runtimeConstructor(); 
     } 
    } 

    private void runtimeConstructor() 
    { 
     MyLibraryClass foo = new MyLibraryClass(); 
    } 

D'une certaine manière ce niveau supplémentaire de L'indirection l'a dupé.

Mais j'ai rencontré un problème supplémentaire lorsque j'ai commencé à essayer de référencer ma bibliothèque sous la forme XAML: le concepteur ne pouvait tout simplement pas le trouver. Il s'avère que le concepteur ne peut pas trouver les bibliothèques non gérées sauf si elles sont sur votre chemin d'accès système. Donc si c'est le same problem, ajouter le répertoire de sortie à votre variable d'environnement PATH peut le réparer.

0

xmlns: UserControls = "clr-namespace: Company.Project.OtherAssembly.UserControls; assemblage = Company.Project.OtherAssembly"

-vous ajouter attribut assemblage?

Questions connexes