2010-10-26 28 views
1

Je travaille actuellement sur l'activation du support par glisser-déposer pour notre application d'entreprise.
L'erreur que je reçois me semble bizarre.
Ce que cela dit est queLa propriété n'existe pas dans l'espace de noms XML

The property 'DragDropHelper.IsDragSource' does not exist in XML namespace 'clr-namespace:DragAndDrop;assembly=DragAndDrop'. Line 61 Position 83 

La propriété est une propriété attachée dans la classe que j'ai trouvé dans l'Internet dans les échantillons et un peu modifié. Voici la déclaration de propriété:

namespace DragAndDrop { 
public class DragDropHelper 
{ 
    public static readonly DependencyProperty IsDragSourceProperty =  
     DependencyProperty.RegisterAttached("IsDragSource", typeof (bool), typeof (DragDropHelper), 
              new UIPropertyMetadata(false, IsDragSourceChanged)); 

    public static bool GetIsDragSource(DependencyObject obj) 
    { 
     return (bool) obj.GetValue(IsDragSourceProperty); 
    } 

    public static void SetIsDragSource(DependencyObject obj, bool value) 
    { 
     obj.SetValue(IsDragSourceProperty, value); 
    } 

Il me semble que la propriété attachée est complètement valide, n'est-ce pas? Cette DragDropHelper est incluse dans une bibliothèque de classes, que je référence à partir de l'application client principale. Lorsque je tente de définir la valeur de la propriété dans une application client:

<ListView x:Uid="list" x:Name="CurrentFolderItemsControl" drag:DragDropHelper.IsDragSource="true" /> 

VS2010 dit que la propriété n'existe pas dans l'espace de noms XML. Le document XAML est un dictionnaire de ressources qui est fusionné avec les ressources d'application client principales, car il contient des styles pour notre contrôle.
Il est encore plus bizarre parce que je créé une classe au sein de l'application principale qui a joint la propriété, puis définissez la valeur de la propriété dans le balisage XAML - application compilée OK

+0

Dans quel assemblage se trouve la classe DragDropHelper? –

+0

Classe DragDropHelper située dans une bibliothèque de classes distincte et référence la bibliothèque à partir de l'application client principale – chester89

+0

Comment avez-vous déclaré l'espace de noms dans XAML? (xmlns: drag = "...") –

Répondre

2

Problème résolu. Mon erreur était que je n'ai pas recompilé la bibliothèque après avoir ajouté la propriété attachée. Après je l'ai fait, tout fonctionne comme prévu. . Désolé tout le monde :(

0

J'ai eu exactement le même problème que vous avez fait. Je l'ai eu pour travailler en plaçant l'attribut [AttachedPropertyBrowsableForChildren] au-dessus de ma méthode de setter. Ne me demandez pas pourquoi, ça a juste marché ...

+1

Cela ne fonctionnait pas pour moi. – yonexbat

1

Désolé pour le nécro ... juste pensé que je partagerais ce qui est arrivé dans mon scénario similaire je copiais mon point de vue d'un projet externe, qui fait référence à l'interne de l'espace de noms du comportement:

xmlns:b="clr-namespace:MyCompany.Common.Behaviours" 
b:WindowBehaviours.Close="{Binding ClosingView}" 

Deux choses nécessaires pour arriver pour que cela fonctionne d'abord, les xmlns nécessaires pour faire référence explicitement l'ensemble de la classe de comportement, comme suit:.

xmlns:b="clr-namespace:MyCompany.Common.Behaviours;assembly=Common" 

en second lieu, j'ai retiré temporairement la deuxième ligne et reconstruit mon sapin solution st. VS2012 obtient parfois son knickers dans un noeud lorsque vous clonez des projets WPF, et un bon nettoyage & Rebuild sans la ligne incriminée fixe souvent des choses (il a reconnu le comportement après avoir ajouté la ligne à nouveau).