WPF Нет событий от элементов управления в RichTextBox - PullRequest
2 голосов
/ 19 марта 2009

Я использую 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 маскирует все события, надеюсь, есть способ их разоблачить.

Ответы [ 2 ]

1 голос
/ 20 марта 2009

Половина ответа - установить для свойства IsDocumentEnabled в RichTextBox значение true. Это позволяет включить элементы управления в нем согласно Embedded UI Elements в RichTextBox . К сожалению, это все еще не вызывает нужное мне событие - GotFocus на TableCell, хотя можно запустить событие, поместив кнопку в ячейку и нажав на нее. Это накапливает событие 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>
0 голосов
/ 05 августа 2009

Обновление

Я нашел следующее (по адресу: 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**
...