トップ回答者
TableCell内のRunオブジェクトのテキスト色を一部変更する方法

質問
-
お世話になります。
わからないことがありますので質問させてください。(VS2012Pro)
FlowDocumentで、Tableを利用し、セルにRunを配置して表を作っております。
表の文字の一部の色を変えたいと思い、Run.TextEffectを利用したのですが、
TableCell内では、なぜか色が変わりませんでした。
TextBlockで囲ってやると、きちんと色は変わるのですが、クリップボードが利用できなくなってしまいます。
また、TableCellの外では色が変わりました。
どのようにすればTableCell内で、クリップボードを利用できる状態で、
Runオブジェクトの文字色を一部変えることができるのでしょうか?
<Window x:Class="WpfSampleApplication.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="400" Width="500"> <FlowDocument> <!-- FlowDocumentの直下で、TextEffectsは動作する --> <Paragraph> <Run Text="12345678"> <Run.TextEffects> <TextEffect PositionStart="1" PositionCount="3" Foreground="Red" /> </Run.TextEffects> </Run> </Paragraph> <Table> <Table.Columns> <TableColumn/> <TableColumn/> </Table.Columns> <TableRowGroup> <TableRow Background="lightgray"> <!-- TableCellの前にTextBlockをつけるとTextEffectsは動作する --> <TableCell> <Paragraph > <TextBlock> <Run Text="12345678"> <Run.TextEffects> <TextEffect PositionStart="1" PositionCount="3" Foreground="Red" /> </Run.TextEffects> </Run> </TextBlock> </Paragraph> </TableCell> <!-- TableCellのなかにあるRunはTextEffectsが動作しない --> <TableCell> <Paragraph> <Run Text="12345678"> <Run.TextEffects> <TextEffect PositionStart="1" PositionCount="3" Foreground="Red" /> </Run.TextEffects> </Run> </Paragraph> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </Window>
回答
-
PositionStartはParagraphのようなBlockの始まり(終わり)なども位置として数える必要があるようです。
TextBlock内ではTextBlock内で完結しているのでRunの先頭から文字数を数えるだけで済みます。
#このことが書かれている資料は見つかりませんでした。PositionStartの数え方と基準位置が判り難いので判り易くしてみる。
<FlowDocument> <!--0--><Paragraph> <!--1--><Run Text="0123456789"> <Run.TextEffects> <TextEffect PositionStart="3" PositionCount="3" Foreground="Red" /> </Run.TextEffects> <!--12--></Run> <!--13--></Paragraph> <!--14--><Table> <Table.Columns> <TableColumn/> <TableColumn/> </Table.Columns> <!--15--><TableRowGroup> <!--16--><TableRow Background="lightgray"> <!--17--><TableCell> <!--18--><Paragraph > <!-- TextBlockが混ざると数え難いのでコメントアウト--> <!--<TextBlock> <Run Text="0123456789" > <Run.TextEffects> <TextEffect PositionStart="1" PositionCount="3" Foreground="Red" /> </Run.TextEffects> </Run> </TextBlock>--> <!--19--></Paragraph> <!--20--></TableCell> <!--21--><TableCell> <!--22--><Paragraph> <!--23--><Run Text="0123456789"> <Run.TextEffects> <TextEffect PositionStart="30" PositionCount="2" Foreground="Green" /> </Run.TextEffects> <!--34--></Run> <!--35--></Paragraph> <!--36--></TableCell> <!--37--></TableRow> <!--38--></TableRowGroup> <!--39--></Table><!--40--> </FlowDocument>
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
すべての返信
-
PositionStartはParagraphのようなBlockの始まり(終わり)なども位置として数える必要があるようです。
TextBlock内ではTextBlock内で完結しているのでRunの先頭から文字数を数えるだけで済みます。
#このことが書かれている資料は見つかりませんでした。PositionStartの数え方と基準位置が判り難いので判り易くしてみる。
<FlowDocument> <!--0--><Paragraph> <!--1--><Run Text="0123456789"> <Run.TextEffects> <TextEffect PositionStart="3" PositionCount="3" Foreground="Red" /> </Run.TextEffects> <!--12--></Run> <!--13--></Paragraph> <!--14--><Table> <Table.Columns> <TableColumn/> <TableColumn/> </Table.Columns> <!--15--><TableRowGroup> <!--16--><TableRow Background="lightgray"> <!--17--><TableCell> <!--18--><Paragraph > <!-- TextBlockが混ざると数え難いのでコメントアウト--> <!--<TextBlock> <Run Text="0123456789" > <Run.TextEffects> <TextEffect PositionStart="1" PositionCount="3" Foreground="Red" /> </Run.TextEffects> </Run> </TextBlock>--> <!--19--></Paragraph> <!--20--></TableCell> <!--21--><TableCell> <!--22--><Paragraph> <!--23--><Run Text="0123456789"> <Run.TextEffects> <TextEffect PositionStart="30" PositionCount="2" Foreground="Green" /> </Run.TextEffects> <!--34--></Run> <!--35--></Paragraph> <!--36--></TableCell> <!--37--></TableRow> <!--38--></TableRowGroup> <!--39--></Table><!--40--> </FlowDocument>
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)