2016-06-02 3 views
2

Wir verwenden ein Bearbeitungssteuerelement (TxTextControl) von Dritt-Anbieter, das über verschiedene Symbolleisten und andere Steuerelemente verfügt, die an es angefügt werden können. Dazu platzieren Sie die Symbolleisten in der Ansicht und verknüpfen sie mit ihrem Namen. Es sieht etwa so aus:Benanntes WPF-Steuerelement kann nicht gefunden werden, wenn es prozedural hinzugefügt wird

<tx:RulerBar x:Name="rulerBar"/> 
<tx:TextControl RulerBar="rulerBar"/> 

Dies funktioniert gut, wenn in XAML definiert, aber wir haben ein Szenario, in dem wir diese prozedural aufbauen müssen. Wenn wir versuchen, die RulerBar (oder andere Symbolleisten/Steuerelemente) zu verknüpfen, wird aus irgendeinem Grund ein Fehler ausgegeben, dass die Symbolleiste nicht gefunden werden kann. Zum Beispiel:

DockPanel dock = new DockPanel(); 
dock.Children.Add(new RulerBar { Name="rulerBar" }); 
dock.Children.Add(new TextControl { RulerBar = "rulerBar" }); 

Ich habe auch versucht Loaded Event-Handler und latente die RulerBar Vereinigung Hinzufügen, bis beide Kontrollen vollständig geladen wurden, aber ich immer noch die gleichen Fehler. Sollte das einfach funktionieren, oder gibt es einen Trick, den ich vermisse? Leider ist die Namenszuordnung der einzige Mechanismus, den sie bereitstellen, und wir können die Steuerelemente nicht als Referenz zuordnen.

+0

Haben Sie die Richtlinien für Sie zu 'using' in Ihrer Klasse? – Adam

+0

@Adam, meinst du, implementieren sie IDisposable? Nein tun sie nicht. – amnesia

Antwort

1

@Eyal Perry ist richtig mit seiner Diagnose des Problems. Um das zu erreichen, sollten Sie die Methode FrameworkElement.RegisterName verwenden. Hier ist ein Beispiel dafür, wie es zu benutzen:

DockPanel dock = new DockPanel(); 
var ruler = new RulerBar { Name = "rulerBar" }; 
dock.RegisterName(ruler.Name, ruler); 
dock.Children.Add(ruler); 
dock.Children.Add(new TextControl { RulerBar = "rulerBar" }); 
+0

Ich lerne jeden Tag etwas Neues :) –

+0

Wie auch ich, vielen Dank, ich war mir dessen nicht bewusst! – amnesia

-2

ich denke, zuerst sollten Sie die dritten Teil Bibliothek zu Ihrem Projekt hinzufügen
Sie in dem Dokument so von right click Projekt tun kann tab
Hinzufügen >> Referenz deine Bibliothek aus dem Fenster Pop-up wählen, der die .dll hinzufügen wird Datei, so dass Sie jede Klasse dieser Bibliothek in jeder Klasse Ihres Projekts verwenden können, indem Sie die Anweisung using für die Klasse der Bibliothek hinzufügen, die Sie verwenden möchten.
i beantwortet Ihnen von Informationen, die Sie zur Verfügung gestellt, wenn Sie uns Ihre Bibliothek zeigen i mehr

Grüße

2

In WPF erklären könnte, die XAML Parsing-Prozess den Wert eines Elements x zuordnet: Name-Attribut mit seinem Namen, Suche nach Namen aktivieren.

Warum funktioniert die Zuweisung der Eigenschaft Name in XAML? Dies ist der Fall, da die Name-Eigenschaft mit einem Attribut gekennzeichnet ist, das den Parser anweist, diesen wie ein x: Name-Attribut zu behandeln.

Da Sie nicht die gleiche Logik wie der XAML-Parser implementieren, müssen Sie einige zusätzliche Codierung, damit Ihr Code funktioniert .. Ich selbst wusste nicht, wie das geht, aber zum Glück @ Grx70 habe ... seine Antwort gesehen.

Verwandte Themen