WPF RichTextBox - substitua o texto selecionado com o controle personalizado

votos
2

Antes de eu começar a cortar em uma solução muito bruto, eu pensei que eu iria ver se alguém poderia me dar um empurrãozinho na direção certa.

O que eu realmente quero fazer é permitir que um usuário selecionar algum texto em um RichTextBox, clique em um botão, e converter esse texto em um controle personalizado prestado. Convertê-lo em um botão que contém o texto que haviam selecionado, por exemplo.

Publicado 27/08/2009 em 06:05
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Você pode fazer isso com Comando e CommandParameter

Em primeiro lugar, ligar o botão para um ICommand, como:

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

Então em seu ViewModel ou Controlador ou Código-behind ou onde quer, você expor o ICommand como uma propriedade, e apontá-lo a um método para fazer o trabalho, como ...

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: Eu tenho usado o RelayCommand de excelente de Josh Smith Fundação MVVM , mas você poderia igualmente usar um RoutedUICommand por exemplo (o que traria o benefício extra de deixá-lo gestos de entrada associado ao seu comando)

Respondeu 27/08/2009 em 06:52
fonte usuário

votos
0

Você precisará escrever algum código que leva a sua selecção e envolve-lo em um InlineUIContainer - é assim que você começa controles dentro de uma caixa de texto rico:

<RichTextBox>
    <FlowDocument>
        <Paragraph>
            <Run>Fo</Run>
            <InlineUIContainer>
                <Button IsEnabled="True">oB</Button>
            </InlineUIContainer>
            <Run>ar</Run>
        </Paragraph>
    </FlowDocument>
</RichTextBox>
Respondeu 27/08/2009 em 10:36
fonte usuário

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