web-dev-qa-db-fra.com

Pourquoi est-ce que je vois l'erreur "Le membre n'est pas reconnu ou n'est pas accessible" sur mon contrôle d'utilisateur WPF?

J'ai un contrôle utilisateur personnalisé avec une propriété publique que j'aimerais pouvoir définir en XAML. Ici c'est en dessous.

TestControl.xaml

<UserControl x:Class="Scale.Controls.TestControl"
         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" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">

TestControl.xaml.cs

using System.Windows.Controls;

namespace MyProject.Controls
{
    public partial class TestControl : UserControl
    {
        public string TestMe { get; set; }
        public TestControl()
        {
            InitializeComponent();
        }
    }
}

Ensuite, dans mon fichier MainWindow.xaml, j'essaie d'inclure ceci:

<controls:TestControl TestMe="asdf" />

Cependant, même si Visual Studio remplit automatiquement la propriété TestMe, je vois alors un soulignement ondulé qui indique "Le membre" Test Me "n'est pas reconnu ou n'est pas accessible", comme indiqué ci-dessous.

The member "Test Me" is not recognized or is not accessible

J'aurais juré avoir déjà fait quelque chose comme ça dans d'autres projets. Comment puis-je accéder (c'est-à-dire définir) les propriétés publiques via XAML comme ceci?

14
Gordon Myers

Vous devez déclarer votre propriété en tant que Dependency Properties

namespace MyProject.Controls
{
    public partial class TestControl : UserControl
    {
        //Register Dependency Property

        public static readonly DependencyProperty TestMeDependency = DependencyProperty.Register("MyProperty", typeof(string), typeof(TestControl));

        public string MyCar
        {
            get
            {

                return (string)GetValue(TestMeDependency);

            }
            set
            {
                SetValue(TestMeDependency, value);
            }
        }

        public TestControl()
        {
            InitializeComponent();
        }
    }
}
5
Moez Rebai

Visual Studio 2017

J'ai eu exactement le même problème. C'était en train de compiler un jour ... et puis ce ne l'était pas. Je n'utilisais pas DependencyProperty, ce qui ne devrait pas être nécessaire comme ci-dessus. Les propriétés apparaissaient dans Intellisense mais transmettaient le même message lors de leur insertion. J'ai nettoyé, construit, reconstruit, redémarré VS, redémarré etc. Tout en vain.

Dernière chance d'essayer ... J'ai supprimé tous les attributs incriminés et obtenu une compilation propre. Ensuite, je les ai remises et elles ont été compilées. Je ne m'attendais vraiment pas à ça. VS avait en quelque sorte changé sa culotte.

17
Paulustrious

Modifiez la cible de génération de AnyCPU en x86 ou x64. Vous ne savez pas pourquoi AnyCPU ne fonctionne pas.

4
Gregory

Si vous utilisez VS2017, essayez de supprimer les dossiers bin et obj dans tous les projets de votre solution, nettoyez la solution et générez à nouveau. Ça marche pour moi !

2
Wajdi Gharsalli

Dans mon cas, il n'y a pas d'erreurs à l'origine, après avoir modifié ma classe, il y a quelques erreurs dans ma classe, puis Xaml Error member is not recognized show. Après avoir résolu les erreurs dans ma classe, je passe à la construction des projets. Tous les projets sont construits sans erreur, mais les erreurs apparaissent toujours dans le Error List Window. En fin de compte, je redémarre Visual Studio, les erreurs disparaissent.

0
yu yang Jian