1

WPF データバインディングを使用して以下を表示する必要があります (値が変わります)。ヘッダーは太字にする必要があり、情報行は通常のテキストです。特定のヘッダーの情報が存在しない場合は、ヘッダーを含めてそのセクションを折りたたむ必要があります。すべてのデータ (ヘッダーと情報項目) を、必要な場所で改行できる 1 つの書式設定された文字列にすることを好みます。

ヘッダー1:

私の情報 1

私の情報 2

ヘッダー 2:

私の情報 3

私の情報 4

4

2 に答える 2

4

もう1つのアプローチを試してください。TextBlock.Inlinesを使用します。次に、モデルを TextBlock にバインドし、カスタム値コンバーターまたはカスタム添付プロパティを介してモデルを解析し、TextBlock のインラインを設定します。

以下は、テキスト文字列を受け取り、2 つおきの単語を太字にする Attached プロパティの例です。

public class RunExtender : DependencyObject
{
    public static string GetText(DependencyObject obj)
    {
        return (string)obj.GetValue(TextProperty);
    }

    public static void SetText(DependencyObject obj, string value)
    {
        obj.SetValue(TextProperty, value);
    }

    public static readonly DependencyProperty TextProperty = DependencyProperty.RegisterAttached("Text", typeof(string), typeof(RunExtender), new PropertyMetadata(string.Empty, OnBindingTextChanged));

    private static void OnBindingTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var bindingText = e.NewValue as string;
        var text = d as TextBlock;
        if (text != null)
        {
            text.Inlines.Clear();
            var words = bindingText.Split(' ');
            for (int i = 0; i < words.Length; i++)
            {
                var word = words[i];
                var inline = new Run() {Text = word + ' '};
                if (i%2 == 0)
                {
                    inline.FontWeight = FontWeights.Bold;
                }
                text.Inlines.Add(inline);
            }
        }
    }
}

これは製品品質のコードではなく、Silverlight のデモから取得したものですが、おわかりいただけると思います。

お役に立てれば。

乾杯、アンバカ。

于 2010-02-18T17:57:53.443 に答える
0

スタイルで太字にしたい場合は、文字列を分割してTextBlocksaStackPanel内で使用するのが最善の策だと思いますExpander

または、文字列全体でそれを行うこともできますが、文字列にはタグRichTextBoxが含まれている必要があると思います。<bold></bold>

于 2010-02-18T17:47:56.050 に答える