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.
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?
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();
}
}
}
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.
Modifiez la cible de génération de AnyCPU en x86 ou x64. Vous ne savez pas pourquoi AnyCPU ne fonctionne pas.
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 !
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.