WPF RichtTextBox で選択したテキストの Foreground プロパティを取得する必要がありますが、TextRange.GetPropertyValue 関数にバグがあると思います。エラーをテストするための簡単なアプリケーションを作成しました。
<RichTextBox x:Name="rtfBox">
<RichTextBox.Document>
<FlowDocument>
<Paragraph>
<Run>run run run</Run>
<Hyperlink TargetName="http://stackoverflow.com">stackoverflow.com</Hyperlink>
</Paragraph>
</FlowDocument>
</RichTextBox.Document>
</RichTextBox>
<Button Content="Click!" Height="28" Click="Button_Click" />
そしてコードビハインドで:
private void Button_Click(object sender, RoutedEventArgs e)
{
var textrange = new TextRange(rtfBox.Selection.Start, rtfBox.Selection.End);
var propertyValue = textrange.GetPropertyValue(TextElement.ForegroundProperty);
MessageBox.Show(propertyValue.ToString());
}
stackoverflow ハイパーリンクの最初の数文字を選択すると、MessageBox は Foreground プロパティが DependencyProperty.UnsetValue であると表示しますが、リンクの他の部分を選択すると、実際の前景色が表示されます。
バグのようです。
この問題の回避策はありますか?