如何在.cs中获取xaml <Run>的内容?

时间:2020-07-23 19:30:40

标签: c# wpf

<Run>与许多文本XAML元素一样,不包含“文本”或“内容”之类的属性。我试图使用{p>来获取<Run>元素的内容

MessageBox.Show(Convert.ToString(output.Inlines.ElementAt(0)));

在此之前,我用output元素填充了<Run>,这是一个文本块,这就是为什么我使用ElementAt(0)的原因。但是,通过运行此代码获得的输出是“ System.Windows.Documents.Run”,而不是<Run>元素的值。那么我如何获得该元素的值呢?

2 个答案:

答案 0 :(得分:1)

如果集合中仅包含“运行”,则可以执行以下操作:

List<String>list1 = new ArrayList<String>();
    list1.add("tommy");
    list1.add("Alex");
    list1.add("Bryan");
    list1.add("Tom");
    list1.add("William");
    list1.add("Willy");

    List<String>list2 = new ArrayList<String>();
    list2.add("Alex");
    list2.add("William");
    list2.add("Candice");
    list2.add("Jane");
    list2.add("Parker");
    list2.add("tommy");
    
    List<String>merged = new ArrayList<String>();
    
    for ( String str1 : list1) {
        for ( String str2 : list2) {
            if ( str1.equals(str2)) {
                merged.add("[ " + str1);
                merged.add(str2 + "]");
            }
        }
    }
    for ( String str1 : list1) {
        for ( String str2 : list2) {
            if ( !str1.equals(str2)) {
                merged.add("[ " + str1);
                merged.add(str2 + "]");

        }
    }
        }
    
    System.out.println(merged);

答案 1 :(得分:1)

由于未将文本转换为运行而无法获得文本输出的原因。

强制转换后,您可以获取.Text属性:

XAML

 <TextBlock Name="Text">
            <Run  Text="Hello"
                  FontSize="100"
                  Name="MyRun" />
    </TextBlock>

隐藏代码

MessageBox.Show(((Run)Text.Inlines.ElementAt(0)).Text);

如果要遍历多个运行:

XAML

    <TextBlock Name="Text">
            <Run  Text="Hello"
                  FontSize="100"
                  Name="MyRun" />
        <Run  Text="My"
              FontSize="100"
              Name="MyRun2" />
        <Run  Text="Friend"
              FontSize="100"
              Name="MyRun3" />
    </TextBlock>

隐藏代码

for(int x = 0; x < Text.Inlines.Count; x++)
{
   MessageBox.Show(((Run)Text.Inlines.ElementAt(x)).Text);
}

希望这会有所帮助。