WPF Нет событий от элементов управления в RichTextBox
-
20-08-2019 - |
Вопрос
Я использую WPF и у меня есть таблица внутри элемента управления RichTextBox.Мне нужно получить цвет фона ячейки таблицы, чтобы изменить ее фокусировку.Моя проблема в том, что я не могу запустить GotFocus или любые другие события для TableCell.
<RichTextBox>
<FlowDocument>
<Table>
<Table.Columns>
<TableColumn />
</Table.Columns>
<TableRowGroup>
<TableRow>
<TableCell GotFocus="SelectionCell_GotFocus">
<Paragraph>1</Paragraph>
</TableCell>
</TableRow>
</TableRowGroup>
</Table>
</FlowDocument>
</RichTextBox>
На изображении ниже показана таблица в элементе управления RichTextBox.Что я хотел бы иметь возможность делать, так это изменять фон по мере перемещения пользователя между ячейками таблицы.
альтернативный текст http://img16.imageshack.us/img16/8151/wpftable.png
Редактировать:После дополнительного изучения проблема не ограничивается таблицами в RichTextBox, похоже, что ни один элемент управления в RichTextBox не способен генерировать события.Я поместил в него кнопку и не смог заставить ее запустить событие Click.Похоже, что RichTextBox маскирует все события, надеюсь, есть способ их демаскировать.
Решение
Наполовину ответ заключается в том, чтобы установить свойству IsDocumentEnabled в RichTextBox значение true .Это позволяет включать элементы управления внутри него в соответствии с Встроенные элементы пользовательского интерфейса в RichTextBox.К сожалению, это все еще не запускает нужное мне событие, которое является GotFocus для табличной ячейки, хотя можно запустить событие, поместив кнопку в ячейку и нажав на нее.Это переносит событие GotFocus вверх по дереву пользовательского интерфейса в ячейку TableCell.Однако я не хочу, чтобы в каждой ячейке была кнопка, так что пора искать альтернативное решение.
<RichTextBox IsDocumentEnabled="True">
<FlowDocument>
<Table>
<Table.Columns>
<TableColumn />
</Table.Columns>
<TableRowGroup>
<TableRow>
<TableCell GotFocus="SelectionCell_GotFocus">
<BlockUIContainer>
<Canvas>
<Button Click="Button_Click">
Click
</Button>
</Canvas>
</BlockUIContainer>
</TableCell>
</TableRow>
</TableRowGroup>
</Table>
</FlowDocument>
</RichTextBox>
Другие советы
Обновить
Я действительно нашел следующее (по адресу: http://www.databaseforum.info/8/504107.aspx) ПОПРОБОВАЛ, И ЭТО РАБОТАЕТ:
ContentElement, один из базовых классов Paragraph и, между прочим, базовый класс практически всего, что содержится в документе, определяет свойства и события, которые вы ищете.
В Коде
void MyCode()
{
Paragraph p = new Paragraph();
p.MouseEnter += p_MouseEnter;
}
void p_MouseEnter(object sender, EventArgs e)
{
Paragraph p = (Paragraph)sender;
p.Background = Brushes.Red;
}
**In Markup**
<Paragraph MouseEnter="p_MouseEnter" />
**You can also trigger on properties like IsMouseOver in styles**