gpt4 book ai didi

c# - TextBlock 选择性线条着色

转载 作者:行者123 更新时间:2023-12-03 10:56:26 29 4
gpt4 key购买 nike

我想读取一个文件,然后根据某些条件,用不同的颜色标记一些行。
我发现了类似的问题和答案,但它不是使用 MVVM 模式编写的:
Selective coloring on dynamic TextBlock content in WPF

我试过了:

<ScrollViewer>
<TextBlock >
<Run Background="{Binding Path=DiffStatus}" Text="{Binding Path=Diff, Mode=OneWay}"/>
</TextBlock>
</ScrollViewer>

但它正在为整个文本着色,而不仅仅是选定的行

最佳答案

我通常的做法是使用 ItemsControl,您可以将面板替换为 WrapPanel,并将项目模板替换为包含所有绑定(bind)的 TextBlock:

<ItemsControl ItemsSource="{Binding Elements}">

<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}">
<TextBlock.Foreground>
<SolidColorBrush Color="{Binding Foreground}" />
</TextBlock.Foreground>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>

</ItemsControl>

然后回到您的 View 模型中,您可以执行以下操作:
public class MainViewModel
{
public TextElement[] Elements { get; } = new TextElement[]
{
new TextElement{ Text="Hello World! "},
new TextElement{ Text="This is some blue text!", Foreground=Colors.Blue }
};
}

public class TextElement
{
public string Text { get; set; }
public Color Foreground { get; set; } = Colors.Black;
}

结果:

enter image description here

显然,如果您想要一个动态文档,那么您将替换 TextElement[]ObservableCollection<TextElement>并添加INPC等。

这比添加运行和跨度等更重要,但从好的方面来说,您可以在资源 block 中用键入的 DataTemplates 替换项目模板,这样您就可以轻松地嵌入图形或您想要的任何其他内容。

我设法实现这一点的唯一其他方法是使用绑定(bind)到 ObservableCollection 并手动管理子 GUI 元素的通用自定义行为。

关于c# - TextBlock 选择性线条着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56317714/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com