2015-05-08 2 views
8

Ich habe ein benutzerdefiniertes Benutzersteuerelement mit einer öffentlichen Eigenschaft, die ich gerne in XAML einstellen könnte. Hier ist es unten.Warum sehe ich in meinem WPF-Benutzersteuerelement einen Fehler "Mitglied wird nicht erkannt oder ist nicht erreichbar"?

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(); 
     } 
    } 
} 

Dann in meiner MainWindow.xaml Datei, ich versuche, dies zu umfassen:

<controls:TestControl TestMe="asdf" /> 

Doch obwohl Visual Studio autocompletes die testme Eigenschaft, ich sehe die Dinge dann mit einem verschnörkelten unterstrichen, dass „Das Element‚Test Me sagt‘nicht erkannt wird oder nicht zugänglich ist“, wie unten zu sehen.

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

Ich hätte geschworen ich so etwas wie dies schon in anderen Projekten gemacht haben. Wie kann ich über XAML auf öffentliche Eigenschaften zugreifen (d. H. Festlegen)?

Antwort

3

Sie benötigen eine Immobilie als 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(); 
     } 
    } 
} 
+0

Ein Beispiel dafür, wie dies zu tun, wäre toll – SoaperGEM

+0

Hoffen, dass es Ihnen hilft –

+1

Ich glaube, Ihr Projekt sollte als Service-Leistung aufzubauen. Sie benötigen nur eine Abhängigkeitseigenschaft, wenn die Eigenschaft das Ziel einer Bindung sein soll. Ich habe gerade ein ähnliches Szenario getestet und es baut wie in Ihrer Frage gezeigt auf. Nicht sehr nützlich ... aber baut. Nach dem Aufbau von VS hört auf mein Gerät zu beschweren. – Sam

-1

statt Einstellung mehrerer Abhängigkeitseigenschaften für die Steuerung zu erklären, würde ich Reflektion verwenden.

public static readonly DependencyProperty UserControlProperty = DependencyProperty.Register("UserControl", 
typeof(object), typeof(CustomUserControl), new PropertyMetadata(null)); 

    public object UserControl 
    { 
      get { return GetValue(UserControlProperty); } 
      set { SetValue(UserControlProperty, value); } 
    } 
11

Visual Studio 2017

Ich hatte genau das gleiche Problem. Es wurde eines Tages kompiliert ... und dann war es nicht. Ich habe DependencyProperty nicht verwendet, die nicht wie oben benötigt werden sollte. Die Eigenschaften wurden in Intellisense angezeigt, gaben jedoch die gleiche Meldung, wenn sie eingefügt wurden. Ich habe geputzt, gebaut, umgebaut, VS neu gestartet, neu gestartet usw. Alles vergebens.

Letzte Grabenprobe ... Ich entfernte alle störenden Attribute und bekam eine saubere Kompilierung. Dann habe ich sie zurückgelegt und es kompiliert. Das habe ich wirklich nicht erwartet. Irgendwie hatte VS seine Schlüpfer in einer Drehung bekommen.

+1

Wenn Wiederaufbauprojekt nicht geholfen hat. Versuchen Sie, die Plattform von AnyPC auf x86 oder x64 zu wechseln. Dies wird das Problem beheben. –

+0

Das gleiche hier, wie @SonnyD sagte. Unerklärlich, aber es funktioniert. –

0

Ändern Sie das Build-Ziel von AnyCPU in x86 oder x64. Unsicher, warum AnyCPU nicht funktioniert.

+1

Sie haben Recht. Ich hatte ähnliches Problem wie oben erwähnt. Neustart von VS, Neuaufbau hat nicht geholfen. Ändern Sie die Plattform von AnyCPU zu anderen, um das Problem zu beheben. –

+0

Ja. Es klappt... –

-1

In meinem Fall, gibt es ursprünglich keine Fehler, nachdem ich meine Klasse ändern, gibt es einige Fehler in meiner Klasse dann die Xaml Error member is not recognized zeigen. Nach dem Lösen von Fehlern in meiner Klasse, gebe ich den Bau der Projekte, alle Projekte werden ohne Fehler gebaut, aber die Fehler immer noch in der Error List Window angezeigt. Am Ende starte ich Visual Studio neu, die Fehler verschwinden.

Verwandte Themen