[wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 22.11.09 16:48
Оценка:
искал подобную тему, но кроме ссылок на мсдн ничего не нашел)
мсдн только внес путанницы)
итак
в WinForms есть такая удобная штука, как RichTextBox
в свое время писал программу, сегодня хочу переделать ее под WPF
программа выделяла куски текста по 2 параметрам: стартовыя позиция символа и длина
выполнялись следющие действия
1. при выделении мышкой запоминались координаты (start, length) и складывались в файл, текст выделялся цветом
start = rtbWriteTxt.SelectionStart;
length = rtbWriteTxt.SelectionLength;


2. из файла считывались координаты и выделялся текст
rtb.Select(start, length);
rtb.SelectionColor = System.Drawing.Color.BlueViolet;



в WPF RichTextBox как я могу сделать подобное?
Re: [wpf] RichTextBox - подсветка слов
От: MxKazan Португалия  
Дата: 22.11.09 17:54
Оценка:
Здравствуйте, gnan, Вы писали:

G>В WPF RichTextBox как я могу сделать подобное?

Используй RichTextBox.Selection. У него есть Start, End и Select. Если этого мало, то напиши, плиз, в чем конкретно затык.
Re[2]: [wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 22.11.09 17:59
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, gnan, Вы писали:


G>>В WPF RichTextBox как я могу сделать подобное?

MK>Используй RichTextBox.Selection. У него есть Start, End и Select. Если этого мало, то напиши, плиз, в чем конкретно затык.

затык видимо в TextPointer и как его хранить в файле подобно значениям start, length?
Re[3]: [wpf] RichTextBox - подсветка слов
От: MxKazan Португалия  
Дата: 22.11.09 18:31
Оценка:
Здравствуйте, gnan, Вы писали:

G>затык видимо в TextPointer и как его хранить в файле подобно значениям start, length?

Набросал такой примерчик (rt — это RichTextBox):
FlowDocument myFlowDoc = new FlowDocument();

myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));

rt.Document = myFlowDoc;

rt.Selection.Select(
    rt.Document.ContentStart.GetPositionAtOffset(3),
    rt.Document.ContentStart.GetPositionAtOffset(10));

// Сохранили начало выделения и конец
var start = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.Start);
var end = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.End);

// Загрузили начало выделения и конец
rt.Selection.Select(
    rt.Document.ContentStart.GetPositionAtOffset(start),
    rt.Document.ContentStart.GetPositionAtOffset(end));
Re[4]: [wpf] RichTextBox - подсветка слов
От: Codechanger Россия  
Дата: 23.11.09 06:38
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, gnan, Вы писали:


G>>затык видимо в TextPointer и как его хранить в файле подобно значениям start, length?

MK>Набросал такой примерчик (rt — это RichTextBox):
MK>
MK>FlowDocument myFlowDoc = new FlowDocument();

MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));

MK>rt.Document = myFlowDoc;

MK>rt.Selection.Select(
MK>    rt.Document.ContentStart.GetPositionAtOffset(3),
MK>    rt.Document.ContentStart.GetPositionAtOffset(10));

MK>// Сохранили начало выделения и конец
MK>var start = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.Start);
MK>var end = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.End);

MK>// Загрузили начало выделения и конец
MK>rt.Selection.Select(
MK>    rt.Document.ContentStart.GetPositionAtOffset(start),
MK>    rt.Document.ContentStart.GetPositionAtOffset(end));
MK>


Там засады покруче на самом деле. Я этим вопросом интересовался, пришел к выводу, что лучше какой-нить AvalonEdit использовать.
Re: [wpf] RichTextBox - подсветка слов
От: Vladek Россия Github
Дата: 23.11.09 08:44
Оценка:
Здравствуйте, gnan, Вы писали:

G>искал подобную тему, но кроме ссылок на мсдн ничего не нашел)


Например.
Everything is an object
Re[4]: [wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 23.11.09 17:57
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, gnan, Вы писали:


G>>затык видимо в TextPointer и как его хранить в файле подобно значениям start, length?

MK>Набросал такой примерчик (rt — это RichTextBox):
MK>
MK>FlowDocument myFlowDoc = new FlowDocument();

MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
MK>myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));

MK>rt.Document = myFlowDoc;

MK>rt.Selection.Select(
MK>    rt.Document.ContentStart.GetPositionAtOffset(3),
MK>    rt.Document.ContentStart.GetPositionAtOffset(10));

MK>// Сохранили начало выделения и конец
MK>var start = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.Start);
MK>var end = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.End);

MK>// Загрузили начало выделения и конец
MK>rt.Selection.Select(
MK>    rt.Document.ContentStart.GetPositionAtOffset(start),
MK>    rt.Document.ContentStart.GetPositionAtOffset(end));
MK>

отлично))
вроде работает)))
Re: [wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 23.11.09 17:59
Оценка:
трабл номер 2 возник
как содержимое rtb сохранять в файл в виде текста
в винформз был rtb.Text
тут есть какие нибудь возможности??

и вопрос еще один
каком образом можно реализовать всплывающие контекстные подсказки?
например наводишь на слово, в подсказке отображается это же слово.
Re[2]: [wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 23.11.09 18:18
Оценка:
Здравствуйте, gnan, Вы писали:

G>трабл номер 2 возник

G>как содержимое rtb сохранять в файл в виде текста
G>в винформз был rtb.Text
G>тут есть какие нибудь возможности??

G>и вопрос еще один

G>каком образом можно реализовать всплывающие контекстные подсказки?
G>например наводишь на слово, в подсказке отображается это же слово.


ваще обленился
сохранение:

TextRange txtr;
FileStream fs;
txtr = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
fs = new FileStream("myFile.txt", FileMode.OpenOrCreate);
txtr.Save(fs, DataFormats.Text);
fs.Close();



чтение:

TextRange txtr;
FileStream fs;
if (File.Exists("myFile.txt"))
{
 txtr = new TextRange(rtb2.Document.ContentStart, rtb2.Document.ContentEnd);
 fs = new FileStream("myFile.txt", FileMode.OpenOrCreate);
 txtr.Load(fs, DataFormats.Text);
 fs.Close();
}



если будут варианты еще, милости просим))

З.Ы. Вопрос
G>каком образом можно реализовать всплывающие контекстные подсказки?
G>например наводишь на слово, в подсказке отображается это же слово.
остается открытым
Re[3]: [wpf] RichTextBox - подсветка слов
От: MxKazan Португалия  
Дата: 23.11.09 18:56
Оценка:
Здравствуйте, gnan, Вы писали:

G>З.Ы. Вопрос

G>G>каком образом можно реализовать всплывающие контекстные подсказки?
G>>например наводишь на слово, в подсказке отображается это же слово.
G>остается открытым
Внутри RichTextBox сплошь FrameworkContentElement'ы, у которых есть свойство ToolTip. Посмотри этот пример.
Re[4]: [wpf] RichTextBox - подсветка слов
От: gnan  
Дата: 21.12.09 22:17
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, gnan, Вы писали:


G>>затык видимо в TextPointer и как его хранить в файле подобно значениям start, length?

MK>Набросал такой примерчик (rt — это RichTextBox):


Span span = new Span(rt.Selection.Start, rt.Selection.End);
span.Foreground = Brushes.Green;

добросал вот до такого
как я понимаю при этом в текст добавляются какие то теги, которые выделяют текст, т.к. после выделения того же текста позиции start и end
второй раз выводятся позиции большие, чем были до этого
var start = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.Start);
var end = rt.Document.ContentStart.GetOffsetToPosition(rt.Selection.End);
MessageBox.Show(rt.Selection.Text + "[" + start.ToString() + ", " + end.ToString() + "]");


а можно ли парсить текст по таким вот свойствам, как цвет?
т.е. найти в тексте rtb все слова, выделенные Brushes.Green
таким образом не придется пересчитывать сохраненные значения start и end при повторном выделении
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.