UWP:为textblock中的特定单词添加样式

时间:2017-07-05 13:10:00

标签: c# xaml uwp uwp-xaml

我在资源文件中有几个字符串,都需要翻译。这些字符串将连接成一个句子并显示在我的应用程序中的TextBlock内,我想在TextBlock内部使一些字符串变为粗体。 E.g。

string a = "This {0} a {1} string.";
string b = "is";
string c = "formatted";
string output = string.Format(a, b, c);

我希望输出为: 格式化字符串。

欢迎任何提示和提示。

2 个答案:

答案 0 :(得分:2)

<Run />内使用TextBlock获取特定字词的其他样式。

<TextBlock>
    This
    <Run FontWeight="Bold">is</Run>
    a
    <Run FontWeight="Bold">formatted</Run>
    string.
</TextBlock>

enter image description here

更新

这是一个简单的例子,可以给你一个想法。我创建了一个名为UserControl的{​​{1}},其中XAML仅包含此内容 -

TextControl

在其代码隐藏中,我定义了三个依赖属性。一种是获取完整的资源字符串,另外两种是传递<TextBlock x:Name="MyTextBlock" /> {0}。我们的想法是将整个字符串拆分为 space ,然后将{1}替换为输入属性,并将它们设为粗体。

{x}

然后你可以像这样使用它 -

public string ResourceString
{
    get => (string)GetValue(ResourceStringProperty);
    set => SetValue(ResourceStringProperty, value);
}
public static readonly DependencyProperty ResourceStringProperty = DependencyProperty.Register(
    "ResourceString", typeof(string), typeof(TextControl), new PropertyMetadata(default(string), (s, e) =>
    {
        var self = (TextControl)s;
        var full = e.NewValue.ToString();

        foreach (var seg in full.Split(' '))
        {
            var run = new Run();

            if (seg.Contains("{0}"))
            {
                run.Text = self.Input0;
                run.FontWeight = FontWeights.Bold;
            }
            else if (seg.Contains("{1}"))
            {
                run.Text = self.Input1;
                run.FontWeight = FontWeights.Bold;
            }
            else
            {
                run.Text = seg;
            }

            run.Text += " ";

            self.MyTextBlock.Inlines.Add(run);
        }
    }));

public string Input0
{
    get => (string)GetValue(Input0Property);
    set => SetValue(Input0Property, value);
}
public static readonly DependencyProperty Input0Property = DependencyProperty.Register(
    "Input0", typeof(string), typeof(TextControl), new PropertyMetadata(default(string)));

public string Input1
{
    get => (string)GetValue(Input1Property);
    set => SetValue(Input1Property, value);
}
public static readonly DependencyProperty Input1Property = DependencyProperty.Register(
    "Input1", typeof(string), typeof(TextControl), new PropertyMetadata(default(string)));

你得到 -

enter image description here

答案 1 :(得分:0)

在这里,您可以找到有关样式化文本块的大量信息:http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/

我建议您使用span方法解决问题,因为您希望使用程序代码

祝你好运