2009-03-19 10 views
2

J'utilise WPF et possède une table dans un contrôle RichTextBox. J'ai besoin d'obtenir la couleur de fond de la cellule du tableau pour le changer. Mon problème est que je ne peux pas obtenir le GotFocus ou d'autres événements à tirer pour le TableCell.WPF Aucun événement de contrôles dans RichTextBox

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

L'image ci-dessous montre la table du contrôle RichTextBox. Ce que j'aimerais pouvoir faire, c'est changer l'arrière-plan lorsque l'utilisateur se déplace entre les cellules du tableau.

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

Edit: Après une enquête plus approfondie la question ne se limite pas au tableau est dans un RichTextBox, aucun contrôle dans un RichTextBox semble être en mesure de générer des événements. J'ai placé un bouton dedans et je n'ai pas eu la balle pour l'obtenir pour déclencher son événement Click. Il semble que la RichTextBox masque tous les événements, avec un peu de chance, il existe un moyen de les démasquer.

Répondre

1

La demi-réponse consiste à définir la propriété IsDocumentEnabled sur RichTextBox sur true. Cela permet d'activer les contrôles à l'intérieur de Embedded UI Elements in RichTextBox. Malheureusement, cela ne déclenche toujours pas l'événement dont j'ai besoin, qui est le GotFocus sur un TableCell, bien qu'il soit possible de déclencher l'événement en plaçant un bouton dans la cellule et en cliquant dessus. Cela fait apparaître l'événement GotFocus dans l'arborescence de l'interface utilisateur vers TableCell. Je ne veux pas de bouton dans toutes les cellules, alors il est temps de chercher une solution alternative.

<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

Mise à jour

Je ne trouve les éléments suivants (à: http://www.databaseforum.info/8/504107.aspx) ESSAYE ET FONCTIONNEMENT:

ContentElement, l'une des classes de base du paragraphe et accessoirement la classe de base à peu près tout ce qui vit dans un document définit les propriétés et les événements que vous recherchez.

Dans Code

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