代码之家  ›  专栏  ›  技术社区  ›  sipsorcery

WPF没有来自RichTextBox中控件的事件

  •  2
  • sipsorcery  · 技术社区  · 15 年前

    我使用的是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控件中的表。我想做的是当用户在表格单元格之间移动时更改背景。

    alt text http://img16.imageshack.us/img16/8151/wpftable.png

    编辑:经过更多的调查,问题不局限于richtextbox中的表,richtextbox中的任何控件似乎都无法生成事件。我在它里面放了一个按钮,但并不是为了让它触发它的点击事件。看起来richtextbox屏蔽了所有事件,希望有一种方法可以解开它们。

    2 回复  |  直到 13 年前
        1
  •  1
  •   sipsorcery    15 年前

    半回答是将RichTextBox上的IsDocumentEnabled属性设置为true。允许根据 Embedded UI Elements in RichTextBox . 不幸的是,这仍然不能触发我需要的事件,即GotFocus在TableCell上,尽管可以通过在单元格中放置一个按钮并单击它来触发事件。它使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>
    
        2
  •  0
  •   Mr.Wizard naktepe    13 年前

    更新

    我确实发现了以下情况(在: http://www.databaseforum.info/8/504107.aspx )尝试过了,但效果很好:

    ContentElement是段落的基本类之一,附带地说,文档中几乎所有内容的基本类定义了您要查找的属性和事件。

    代码中

    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**