WPF RichTextBox - Remplacer le texte sélectionné avec contrôle personnalisé

voix
2

Avant de commencer le piratage dans une solution vraiment brute, je pensais voir si quelqu'un pouvait me donner un petit coup de coude dans la bonne direction.

Ce que je veux vraiment faire est de laisser un utilisateur de sélectionner un texte dans un RichTextBox, cliquez sur un bouton, et convertir le texte en un contrôle rendu personnalisé. Convertir à un bouton contenant le texte qu'ils avaient choisi, par exemple.

Créé 27/08/2009 à 06:05
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Vous pouvez le faire avec commande et CommandParameter

Tout d'abord, lier le bouton à un ICommand, comme:

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

Ensuite, dans votre ViewModel ou contrôleur ou code-behind ou ailleurs, vous exposez le ICommand comme une propriété, et le point à une méthode pour faire le travail, comme ...

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
}

Note: Je l' ai utilisé le RelayCommand de l' excellent Josh Smith Foundation MVVM , mais vous pouvez également utiliser un RoutedUICommand par exemple (qui ajouterait l'avantage supplémentaire de vous laisser des gestes d'entrée associés à votre commande)

Créé 27/08/2009 à 06:52
source utilisateur

voix
0

Vous aurez besoin d'écrire du code qui prend votre sélection et l'enveloppe dans un InlineUIContainer - voilà comment vous obtenez des contrôles dans une zone de texte riche:

<RichTextBox>
    <FlowDocument>
        <Paragraph>
            <Run>Fo</Run>
            <InlineUIContainer>
                <Button IsEnabled="True">oB</Button>
            </InlineUIContainer>
            <Run>ar</Run>
        </Paragraph>
    </FlowDocument>
</RichTextBox>
Créé 27/08/2009 à 10:36
source utilisateur

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