Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Проблема подчеркивания слов в RichTextBox


Автор: ICEMAN3141592 19.11.2010, 00:26
        Здравствуйте. У меня такая проблема. У меня есть RichTextBox. Пользователь должен вводить слова, те слова, которые у нас есть в словаре, подчеркиваем зеленым, тех слов, которых нету,- красным... Читал все статьи, которые связаны с моей задачей, но ничего близкого не нашел (http://forum.vingrad.ru/forum/topic-307410/unread-1.html, http://forum.vingrad.ru/forum/topic-314138/unread-1.html). Если бы у нас был статичный текст, то можно было наделать Run- ов, но у нас он изменяется...
        Заранее спасибо.

Автор: ICEMAN3141592 19.11.2010, 14:39
Я думал, что хотя бы на Vingrad- е кто- то знает WPF

Автор: CasperSC 20.11.2010, 03:43
Вычитал пример из книги, затестил его, слова находит, но не выделяет почему-то. То есть я ставил точки останова и код реально работает, но текст именно не выделяется почему-то. Может поможет:

Код

<Window x:Class="WpfApplicationFindTextRichTextBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        TextOptions.TextFormattingMode="Display">
    <Grid>
        <DockPanel>
            <WrapPanel DockPanel.Dock="Top">
                <TextBox Height="23" Name="textBoxToFind" Width="232" />
                <Button Content="Поиск" Height="23" Name="btnFind" Width="75" Click="btnFind_Click" />
                <TextBlock Height="23" Name="textBlockOffset" Text="" />
            </WrapPanel>
            <RichTextBox Name="_rtb"/>
        </DockPanel>
    </Grid>
</Window>


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplicationFindTextRichTextBox
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnFind_Click(object sender, RoutedEventArgs e)
        {
            FlowDocument doc = _rtb.Document;
            TextPointer cur = doc.ContentStart;

            while (cur != null)
            {
                TextPointer end = cur.GetPositionAtOffset(textBoxToFind.Text.Length);
                if (end != null)
                {
                    TextRange test = new TextRange(cur, end);
                    if (test.Text == textBoxToFind.Text)
                    {
                        _rtb.Selection.Select(test.Start, test.End);
                        break;
                    }
                }
                cur = cur.GetNextInsertionPosition(LogicalDirection.Forward);
            }
            
        }
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)