Pregunta

Estoy usando WPF y tengo una tabla dentro de un control RichTextBox. Necesito obtener el color de fondo de la celda de la tabla para cambiarlo y obtener el foco. Mi problema es que no puedo hacer que se active el GotFocus o cualquier otro evento para TableCell.

<RichTextBox>
    <FlowDocument>
       <Table>
           <Table.Columns> 
              <TableColumn />
           </Table.Columns>
           <TableRowGroup>
               <TableRow>
                   <TableCell GotFocus="SelectionCell_GotFocus">
                       <Paragraph>1</Paragraph>
                   </TableCell>
               </TableRow>
           </TableRowGroup>
       </Table>
    </FlowDocument>
</RichTextBox>

La imagen a continuación muestra la tabla en el control RichTextBox. Lo que me gustaría poder hacer es cambiar el fondo a medida que el usuario se mueve entre las celdas de la tabla.

texto alternativo http://img16.imageshack.us/img16/8151/wpftable .png

Editar: después de más investigación, el problema no se limita a las tablas en un RichTextBox, ningún control en un RichTextBox parece ser capaz de generar eventos. Puse un botón en él y no estaba listo para que disparara su evento Click. Parece que RichTextBox enmascara todos los eventos, con suerte hay una manera de desenmascararlos.

¿Fue útil?

Solución

La media respuesta es establecer la propiedad IsDocumentEnabled en RichTextBox en true. Eso permite que los controles dentro de él se habiliten según Elementos de IU integrados en RichTextBox . Desafortunadamente, eso todavía no dispara el evento que necesito, que es GotFocus en una TableCell, aunque es posible hacer que el evento se active poniendo un botón en la celda y haciendo clic en él. Eso hace que el evento GotFocus suba por el árbol de la IU a TableCell. Sin embargo, no quiero un botón en cada celda, así que es hora de buscar una solución alternativa.

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

Otros consejos

Update

Encontré lo siguiente (en: http: //www.databaseforum. info / 8 / 504107.aspx ) PROBADO Y FUNCIONA:

ContentElement, una de las clases base de Párrafo y, por cierto, la clase base de casi todo lo que vive en un documento define las propiedades y eventos que está buscando.

En Código

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**
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top