太字と斜体のマークアップ テキストを含む FrameworkElement を構築する最も簡単な方法は何ですか?
質問
次のことを行うよりエレガントな方法はありますか?
基本的に、簡単な方法が必要です プログラム的に を建てる WrapPanel
(または他の FrameworkElement):
- ラップする 正しく
- いくつかの単語が持つことを許可します 大胆な 文章
- いくつかの単語が持つことを許可します イタリック 文章
- 他のものを許可します 書式設定, 、例えば色、背景
- 理想的には、たとえば変換するメソッドです。」
This is <b>bold</b> and this is <i>italic</i> text.
" を適切な FrameworkElement に追加して、たとえば次のようにすることができます。 StackPanel に追加します そしてそれを表示します。
コード:
using System.Windows;
using System.Windows.Controls;
namespace TestAddTextBlock2343
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
WrapPanel wp = new WrapPanel();
wp.AddTextBlock("This is a sentence with ");
{
TextBlock tb = wp.AddTextBlockAndReturn("bold text");
tb.FontWeight = FontWeights.Bold;
}
wp.AddTextBlock(" and ");
{
TextBlock tb = wp.AddTextBlockAndReturn("italic text");
tb.FontStyle = FontStyles.Italic;
}
wp.AddTextBlock(" in it.");
}
}
public static class XamlHelpers
{
public static TextBlock AddTextBlockAndReturn(this WrapPanel wp, string text)
{
TextBlock tb = new TextBlock();
tb.Text = text;
wp.Children.Add(tb);
return tb;
}
public static void AddTextBlock(this WrapPanel wp, string text)
{
TextBlock tb = wp.AddTextBlockAndReturn(text);
}
}
}
解決
編集:別の回答で発見したのは、 TextBlock
も持っています Inlines
追加できるコレクション Run
s. アンヴァカの答え は、添付プロパティを一種のコンバータとして巧妙に使用しています。
あなたの状況に合うと思うのは、 FlowDocumentScrollViewer
そして FlowDocument
. 。手動による作成について説明します。 IValueConverter
若干 ここ.
例で示したものと同様のヘルパー関数を使用することになるでしょうが、 FlowDocument
はすでに HTML によく似ており、ラップを簡単に処理できます。
あなたが追加します Paragraph
に FlowDocument
, 、 あなたが追加します Run
に Paragraph
, 、そしてそれぞれ Run
から派生 TextElement
したがって、同じプロパティがたくさんあります TextBlock
そうします。
FlowDocument doc = new FlowDocument();
Paragraph par = new Paragraph();
doc.Blocks.Add( par );
Run r;
r = new Run( "This is " );
par.Inlines.Add( r );
r = new Run( "bold" );
r.FontWeight = FontWeights.Bold;
par.Inlines.Add( r );
r = new Run( " and this is " );
par.Inlines.Add( r );
r = new Run( "italic" );
r.FontStyle = FontStyles.Italic;
par.Inlines.Add( r );
r = new Run( " text." );
par.Inlines.Add( r );
また、書式設定部分文字列が太字/斜体のタグまたはその他の非常に単純なマークアップに制限されたままになる場合は、 Regex.Split()
個別に決定する最も簡単な方法かもしれません Run
単一の文字列から。これを使用すると、文字列を複数の文字列に分割しながら、「区切り文字」を保持できます。
所属していません StackOverflow