Domanda

Mi sono appena trovato una nuova sfida: crea un elaboratore di testi che è nella gestione più simile al web che al testo semplice. Progettare un bel framework per questo è ciò che non vedo l'ora di cominciare, ma devo sapere quali sono le possibilità sul lato della GUI (probabilmente avrà un sacco di sfide della GUI).

Quindi la cosa di base di cui ho bisogno di una sorta di controllo in cui posso rendere parti del mio testo cliccabile / mouse.

Sono un po 'nuovo a WPF e non sono sicuro di come farlo. Qualcuno ha un'idea di come farlo? Ci sono esempi? Ci sono già controlli per questo?

Grazie in anticipo

MODIFICARE:

Ho scoperto un modo per farlo con un RichTextBox:

// 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;

Ora ho un bel collegamento ipertestuale nella mia casella di testo ... tranne quando faccio clic, non succede nulla. Cosa mi manca qui?

È stato utile?

Soluzione

Puoi usare il Collegamento ipertestuale classe. È un frameworkConteTelement, quindi puoi usarlo in un blocco di testo o in un flowdocument o in qualsiasi altro luogo puoi incorporare il contenuto.

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

Potresti voler guardare usando un file RichTextBox come parte del tuo editore. Ciò ospiterà un documento Flow, che può contenere contenuti come i collegamenti ipertestuali.


Aggiornamento: ci sono due modi per gestire i clic sul collegamento ipertestuale. Uno è gestire il RequestNavigigate evento. È un Evento routing, quindi puoi collegare un gestore al collegamento ipertestuale stesso o puoi attaccarne uno a un elemento più alto nell'albero come la finestra o il RichTextBox:

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

L'altro modo è usare comandante impostando il Comando proprietà sul collegamento ipertestuale a un Comando io implementazione. Il metodo eseguito sull'ICommand verrà chiamato quando si fa clic sul collegamento ipertestuale.

Se vuoi lanciare un browser nel gestore, puoi passare l'URI a Process.Perct:

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

Altri suggerimenti

Nota È inoltre necessario impostare le seguenti proprietà sul tuo RichTextBox o i collegamenti ipertestuali saranno disabilitati e non attireranno eventi. Senza isreadonly è necessario fare clic su CTRL, con i collegamenti ipertestuali, con Isreadonly che sparano con un normale clic sinistro.

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

Il modo più semplice è gestire l'evento di requestNavigate come questo:


...
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;
}

Ci sono alcuni problemi con l'avvio di un browser predefinito passando URL al processo. Inizia e potresti voler Google per un modo migliore per implementare il gestore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top