我如何用粗体和普通文本绑定文本块

时间:2014-08-11 11:54:26

标签: c# wpf data-binding textblock

我有一部分文字,其中一些单词已格式化。 这些文本列在ListBox中。当用户单击ListBoxitem时,我想收集该selectedItem并将用户带到另一个地方。我的问题是我无法将TextBlock与另一个TextBlock实例绑定。而TextBlock有许多内联,我想展示。

我一直在尝试这个解决方案:

<ListBox Width="800" Name="foundedTextBlocksListBox" SelectionChanged="foundedTextBlocksListBox_SelectionChanged" Background="Transparent" ItemsSource="{Binding}" Grid.Row="2" Visibility="Visible" Height="Auto" HorizontalAlignment="Center">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel VerticalAlignment="Center" Orientation="Vertical">
                    <TextBlock x:Name="foundedTextBlocks" DataContext="{Binding Textblock}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

像这样绑定到DataContext之后:

            ObservableCollection<FoundedTextBlock> listOfFoundedTextBlockResults = new ObservableCollection<FoundedTextBlock>();
            TextBlock textblock = new TextBlock();
            while (blockString.IndexOf("<b>") != -1)
            {
                int startOfWord = blockString.IndexOf("<b>");
                int endOfWord = blockString.IndexOf("</b>");
                string text = blockString.Substring(0, startOfWord);
                textblock.Inlines.Add(text);
                string boldedWord = blockString.Substring(startOfWord + 3, endOfWord - startOfWord - 3);
                textblock.Inlines.Add(new Run() { Text = boldedWord, FontWeight = FontWeights.Bold });
                blockString = blockString.Substring(endOfWord + 4);
                textblock.Inlines.Add(blockString);
            }
            textblock.Tag = dbInfo;
            listOfFoundedTextBlockResults.Add(new FoundedTextBlock() { Textblock = textblock });
        }
        foundedTextBlocksListBox.DataContext = listOfFoundedTextBlockResults;

我无法在ListBox中看到任何ListBoxItems。我的Binding是错的还是可能的? 之前我管理过要显示的TextBlock.Text属性,但是在第一次内联添加到TextBlock之后,没有内联是粗体文本或任何其他内联。 我怎么能解决这个annoiyng问题?简而言之,我需要显示许多带有格式化文本的TextBlock ...

FoundedTextBlock类具有TextBlock textblock {get; set;}属性 我将Tag属性保存到我的类实例中,因此我可以在SelectedValueChanged事件发生时收集所需的信息。

1 个答案:

答案 0 :(得分:0)

也许您应该在XAML中使用ContentPresenter而不是TextBlock

替换

 <TextBlock x:Name="foundedTextBlocks" DataContext="{Binding Textblock}"></TextBlock>

<ContentPresenter Content="{Binding Textblock}" />

请尝试一下......缺少其余代码以提供更好的答案。