Frage

Ich war gerade eine neue Herausforderung: Machen Sie einen Textverarbeitungsprozessor, der eher wie das Web als auch im einfachen Text handelt. Das Entwerfen eines schönen Frameworks dafür ist es, mit dem ich es kaum erwarten kann, aber ich muss wissen, welche Möglichkeiten auf der GUI -Seite sind (es wird wahrscheinlich eine Menge GUI -Herausforderungen haben).

Das grundlegende Sache, die ich eine Art Kontrolle brauche, bei der ich Teile meines Textes anklicken kann / Maus-over-möglich machen kann.

Ich bin ein bisschen neu in WPF und bin mir nicht sicher, wie ich das machen soll. Hat jemand eine Idee, wie man das macht? Gibt es Beispiele? Gibt es dafür bereits Steuerelemente?

Danke im Voraus

BEARBEITEN:

Ich habe einen Weg gefunden, dies mit einer Richtextbox zu tun:

// Create a FlowDocument to contain content for the RichTextBox.
FlowDocument myFlowDoc = new FlowDocument();

// Add paragraphs to the FlowDocument.

Hyperlink myLink = new Hyperlink();
myLink.Inlines.Add("hyperlink");
myLink.NavigateUri = new Uri("http://www.stackoverflow.com");

// Create a paragraph and add the Run and hyperlink to it.
Paragraph myParagraph = new Paragraph();
myParagraph.Inlines.Add("check this link out: ");
myParagraph.Inlines.Add(myLink);
myFlowDoc.Blocks.Add(myParagraph);

// Add initial content to the RichTextBox.
richTextBox1.Document = myFlowDoc;

Ich bekomme jetzt einen schönen Hyperlink in meinem Textfeld ... außer wenn ich darauf klicke, passiert nichts. Was vermisse ich hier?

War es hilfreich?

Lösung

Du kannst den ... benutzen Hyperlink Klasse. Es handelt sich um eine FrameworkContentelement, sodass Sie sie in einem Textblock oder einem FlowDocument oder überall dort verwenden können, wo Sie Inhalte einbetten können.

<TextBlock>
    <Run>Text</Run>
    <Hyperlink NavigateUri="http://stackoverflow.com">with</Hyperlink>
    <Run>some</Run>
    <Hyperlink NavigateUri="http://google.com">hyperlinks</Hyperlink>
</TextBlock>

Möglicherweise möchten Sie sich ansehen Richtextbox als Teil Ihres Herausgebers. Dadurch wird ein FlowDocument veranstaltet, das Inhalte wie Hyperlinks enthalten kann.


UPDATE: Es gibt zwei Möglichkeiten, Klicks auf den Hyperlink zu verarbeiten. Eine ist, das zu handhaben RequestNavigate Veranstaltung. Es ist ein Routed Event, Sie können also entweder einen Handler am Hyperlink selbst anbringen oder ein Element im Baum wie das Fenster oder die Richtextbox an ein Element anbringen:

// On a specific Hyperlink
myLink.RequestNavigate +=
    new RequestNavigateEventHandler(RequestNavigateHandler);
// To handle all Hyperlinks in the RichTextBox
richTextBox1.AddHandler(Hyperlink.RequestNavigateEvent,
    new RequestNavigateEventHandler(RequestNavigateHandler));

Der andere Weg ist zu verwenden Befehl Durch Einstellen der Befehl Eigenschaft auf dem Hyperlink zu einem Ich befehle Implementierung. Die ausgeführte Methode auf dem icommand wird aufgerufen, wenn der Hyperlink geklickt wird.

Wenn Sie einen Browser im Handler starten möchten, können Sie die URI an übergeben Process.start:

private void RequestNavigateHandler(object sender, RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}

Andere Tipps

Beachten Sie auch, dass Sie auch die folgenden Eigenschaften auf Ihrer Richtextbox festlegen müssen oder die Hyperlinks deaktiviert sind und keine Ereignisse abfeuern. Ohne Isreadonly müssen Sie auf die Hyperlinks klicken, wobei IsReadonly mit einem normalen Linkklall feuern.

<RichTextBox
    IsDocumentEnabled="True"
    IsReadOnly="True">

Am einfachsten ist es, das RequestNavigate Event wie folgt zu behandeln:


...
myLink.RequestNavigate += HandleRequestNavigate;
...

private void HandleRequestNavigate(object sender, RoutedEventArgs e)
{
   var link = (Hyperlink)sender;
   var uri = link.NavigateUri.ToString();
   Process.Start(uri);
   e.Handled = true;
}

Es gibt einige Probleme beim Starten eines Standardbrowsers durch Übergabe von URL an den Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top