2009-03-19 4 views
2

私はWPFを使用しており、RichTextBoxコントロール内にテーブルを持っています。私はそれがフォーカスを取得する変更するテーブルのセルの背景色を取得する必要があります。私の問題は、GotFocusやその他のイベントをTableCellで呼び出せないということです。WPFいいえRichTextBoxのコントロールからのイベント

<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はすべてのイベントをマスクしているようですが、うまくいけばそれらをマスク解除する方法があります。

答えて

1

答えの半分は、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> 
0

更新

私が見つけた(で:http://www.databaseforum.info/8/504107.aspx)以下しようとしたITワークス:

のContentElement、段落の基底クラスの1つの偶然に基本クラスをドキュメントにあるすべてのものが、探しているプロパティとイベントを定義しています。

コードで

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** 
関連する問題