2

我正在使用 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 屏蔽了所有事件,希望有办法取消屏蔽它们。

4

2 回答 2

1

一半的答案是将 RichTextBox 上的 IsDocumentEnabled 属性设置为 true。这允许根据RichTextBox 中的嵌入式 UI 元素启用其中的控件。不幸的是,这仍然不会触发我需要的事件,即 TableCell 上的 GotFocus,尽管可以通过在单元格中放置一个按钮并单击它来触发该事件。这会将 GotFocus 事件从 UI 树中冒泡到 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>
于 2009-03-19T23:54:00.273 回答
0

更新

我确实找到了以下内容(在: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**
于 2009-08-04T23:26:00.400 回答