WPF RichTextBox - sostituire il testo selezionato con controllo personalizzato

voti
2

Prima di iniziare l'hacking in una soluzione davvero grezza, ho pensato di vedere se qualcuno mi potrebbe dare un piccola spinta nella giusta direzione.

Quello che voglio veramente fare è lasciare che un utente seleziona del testo in un RichTextBox, fare clic su un pulsante, e convertire il testo in un controllo reso personalizzato. Convertirlo in un pulsante contenente il testo che avevano selezionato, per esempio.

È pubblicato 27/08/2009 alle 06:05
fonte dall'utente
In altre lingue...                            


2 risposte

voti
2

È possibile farlo con Command e CommandParameter

In primo luogo, associare il pulsante per un ICommand, come:

<Button Content="Go" Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=myRichTextBox, Path=Selection}" />
<RichTextBox Name="myRichTextBox" />

Poi, nel tuo ViewModel o Controller o Codice-dietro o ovunque, si espone l'iCommand come una proprietà, e puntarlo a un metodo per fare il lavoro, come ...

public ICommand MyCommand
{
    get
    {
        if (_queryCommand == null)
        {
            _queryCommand = new RelayCommand<TextSelection>(DoWork);
        }
        return _queryCommand;
    }
}

private void DoWork(TextSelection param)
{
    string selectedText = param.Text;

    // Build your control here...
    // probably put it in an ObservableCollection<Control> which is bound by an Items Control, like a ListBox
}

Nota: Ho usato il RelayCommand da eccellente di Josh Smith Fondazione MVVM , ma si potrebbe ugualmente utilizzare un RoutedUICommand per esempio (che aggiungerebbe l'ulteriore vantaggio di lasciare che si gesti ingresso associare al comando)

Risposto il 27/08/2009 a 06:52
fonte dall'utente

voti
0

Avrai bisogno di scrivere del codice che prende la selezione e lo avvolge in un InlineUIContainer - è così che si ottiene controlli all'interno di una casella di testo RTF:

<RichTextBox>
    <FlowDocument>
        <Paragraph>
            <Run>Fo</Run>
            <InlineUIContainer>
                <Button IsEnabled="True">oB</Button>
            </InlineUIContainer>
            <Run>ar</Run>
        </Paragraph>
    </FlowDocument>
</RichTextBox>
Risposto il 27/08/2009 a 10:36
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more