Ich möchte die Suchergebnisse in einem WPF ItemsControl mit hervorgehobenen Abfragebegriffen anzeigen.So zeigen Sie Suchergebnisse in einem WPF-Elementsteuerelement mit hervorgehobenen Abfragebegriffen an
Die Suchmaschine ich benutze, Lucene.Net mit der Highlighter-Plugin, gibt Strings mit den Suchbegriffen wie so markiert:
...these <Bold>results</Bold> were found to be statistically significant...
ich den Highlighter Plugin anweisen kann jeden Satz von Markup-Tags zu verwenden, um ein wickeln Suchbegriff abfragen. Ich bin nicht auf den Tag <Bold>
im obigen Beispiel beschränkt. Für WPF würde ich wahrscheinlich diese <Run/>
Elemente mit einem Stil versehen.
Die Herausforderung besteht darin, die angegebene Zeichenfolge zu nehmen und sie so darzustellen, als wäre sie "tatsächliches XAML" in der Datentabelle, die ich für die Suchergebnisse verwende. Mit anderen Worten, ich möchte so etwas sehen:
... diese Ergebnisse wurden statistisch signifikant sein ...
Aber ich bin zu kämpfen mit, wie zu kombinieren Datenbindung mit dynamischem Rendering eines XAML-Strings innerhalb der Datamaplatte. Was ist der beste Ansatz hier?
- Verwenden Sie ein UserControl, um jedes Suchergebnis anzuzeigen, und rufen Sie
XamlReader.Load()
aus dem Codebehind? - Erstellen Sie ein FlowDocument mit den Suchergebniszeichenfolgen und zeigen Sie die Ergebnisse mit einem FlowDocumentScrollViewer an?
- Etwas anderes ganz ...?
Meine Frage war wahrscheinlich nicht klar genug. Der schwierige Teil ist, dass ich die Zeichenfolge in XAML zur Laufzeit ändern muss, nicht kompilieren Zeit. – dthrasher
Vielleicht habe ich etwas verpasst, aber es ist für mich machbar, eine XAML-Zeichenfolge wie in meinem Beispiel (mit einem regulären Ausdruck) zu erstellen und Ihren ersten Ansatz zu verwenden. Die von mir vorgeschlagene Lösung bestand darin, zur Laufzeit einen TextBlock zu erstellen und seine Inlinesammlung mit Runs zu füllen. Das Hinzufügen eines Stils zu den markierten Runs ist eine Lösung, um FontWeight = "Bold" zu ersetzen. – Mart
Danke, @Mart. Ihr Vorschlag hat mich auf den richtigen Weg gebracht. Meine Antwort beschreibt den Ansatz, den ich verwendet habe. – dthrasher