2010-05-10 5 views
7

Ich möchte ein WPF-Textfeld-Steuerelement erstellen, das den E-Mail-Empfänger-Textfeldern in Outlook ähnelt (die To-, Cc- und Bcc-Eingaben). Ich interessiere mich nicht so sehr für die automatische Vervollständigung (ich habe dafür Millionen von Beispielen gefunden), aber ich habe wirklich Probleme damit, wie Textelemente mit Trennzeichen in der Textbox sich wie Entitäten verhalten Outlook (sobald ein eingegebener Empfänger aufgelöst wird, wird dieser Text zu einer 'Entity', auf die Sie klicken können, mit der rechten Maustaste, um ein Kontextmenü zu erhalten, usw. Es ist kein 'einfacher Text' mehr, in dem Sie den Cursor platzieren können) ...Erstellen eines WPF-Textfeld-Steuerelements wie Outlook-E-Mail-Empfänger-Textfeld

Hat jemand irgendwelche High-Level-Ideen, wie dies zu erreichen? Kennen Sie irgendwelche vorhandenen Beispiele (ich habe stundenlang gegooglet)?

Vielen Dank im Voraus,

Michael.

+0

Vielleicht kann dieser Artikel Ihnen helfen: [Introducing TagBox] (http://www.thesilvermethod.com/Default.aspx?Id=IntroducingTagBox) – xVir

+0

http://blog.pixelingene.com/2010/10/tokenizing- control-convert-text-to-tokens/ - Sehen Sie sich dieses Steuerelement an – Sahadevan

Antwort

5

Mein rough Gedankenprozess wäre dies ... (Hinweis: Ich bin nicht wirklich codieren, so dass meine Details ein wenig abweichen ...).

Hohe Verhalten:

  • die Art der Daten in Ihrer Kontrolle ist eine Liste von Gegenständen, die nicht ausgewählt werden kann. Daher ist Ihre Kontrolle, etwa, ein ItemsControl (in Bezug auf Visual/XAML, es ist ein ItemsControl mit einem WrapPanel Stil Layout und sehr einfach TextBlock für die Artikelvorlage).
  • , wenn Ihr Steuer Fokus erhält, müssen Sie die Vorlage wechseln ein TextBox
  • , wenn Ihr die Kontrolle verliert Fokus zu sein, müssen Sie den eingegebenen Text aufgeteilt und in eine Liste für die Anzeige zu konvertieren.

Deshalb denken Code:

  • Sie ein Benutzersteuerelement benötigen, möglicherweise von Items abgeleitet. Das gibt Ihnen grundlegendes Verhalten, um eine Liste von Elementen darzustellen.
  • Sie benötigen eine benutzerdefinierte DependencyProperty auf Ihrem Steuerelement, das die Zeichenfolge mit Trennzeichen darstellt.
  • Wenn sich die Zeichenfolgeneigenschaft ändert, müssen Sie sie analysieren und die Liste der Elemente im Steuerelement ersetzen.
  • Wenn sich die Listeneigenschaft ändert, müssen Sie die Zeichenfolgeneigenschaft durch eine entsprechend abgegrenzte Liste ersetzen.

In Bezug auf Code-Behind sollte dieser Teil ziemlich einfach sein. Dann wird für die Vorlage XAML ...

  • müssen Sie eine Basisvorlage, die Ihre zeigt Items Eigenschaft als Liste, mit dem WrapPanel Layout oben erwähnt.
  • Sie benötigen einen Auslöser, der diese Vorlage ersetzt, wenn das Steuerelement den Fokus hat.
  • Die Ersatzvorlage sollte eine TextBox sein, die an die Zeichenfolgeneigenschaft des Steuerelements gebunden ist.
  • das Standardbindungsverhalten auf einem TextBox wird nur einen neuen Wert schieben, wenn der TextBox Fokus verliert, so müssen Sie darüber nachdenken, ob Sie, sagen wir, eine "Enter" Taste drücken Fokus (damit die Vorlage auf die Listenversion - Wenn sich der Wert der Zeichenfolgeneigenschaft ändert, aktualisiert Ihr Codebehind die Liste.

Dies sollte Ihnen das grundlegende Verhalten geben. Sie sollten in der Lage sein, entweder die Listeneigenschaft oder die Zeichenfolgeneigenschaft von außerhalb des Steuerelements zu binden, obwohl Sie möglicherweise vorsichtig sein müssen, was passiert, wenn Sie beide Eigenschaften binden, da zwischen ihnen eine Zweiwegabhängigkeit besteht ...