WPF Нет событий от элементов управления в RichTextBox

StackOverflow https://stackoverflow.com/questions/660730

  •  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**
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top