- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近在做一个项目,我觉得一个不错的解决方案是在 RichTextBox
中显示一个段落,该段落绑定(bind)到一组对象,这些对象将包含一个字符串和一些关于那个字符串。我希望我能做这样的事情:
<RichTextBox Name="rtb" IsReadOnly="True" FontSize="14" FontFamily="Courier New">
<FlowDocument>
<Paragraph>
<Run Foreground="Red" Text="{Binding foo}"/>
<Run Foreground="Green" Text="{Binding bar}"/>
<Run Foreground="Blue" Text="{Binding baz}"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
这很好用,但是这是提前定义了所有绑定(bind),但实际上我直到运行时才知道它们,每个字符串都将存储到一个集合中。我正在想办法定义和绑定(bind)多个Run
block ,并将它们全部放在要显示的RichTextBox
中。如果可能的话,我更喜欢主要是 xaml 的解决方案,但如果我必须在后面的代码中这样做,那可能没问题,只要绑定(bind)坚持并且所有内容在初始加载后正确更新即可。
我尝试过类似的方法,但无法弄清楚如何从后面的代码绑定(bind)到 Run
的 Text
属性:
foreach (var item in col)
{
Run run = new Run();
Binding b = new Binding();
b.Source = this;
b.Path = new PropertyPath(item.StaticText);
run.SetBinding(run.Text, b); //Tells me Text is not a dependency property
//But it could be bound if this were xaml?
}
我还尝试将 ItemsControl
放入 RichTextBox
中,将 Run
作为项目的数据模板,但它不允许我将数据模板设为 Run
标记,但我不确定它是否能正常工作。
关于最佳方法的任何指导,或者我的解决方案有什么问题。
最佳答案
你可以用这个...
<Paragraph>
<ItemsControl ItemsSource="{Binding MyRuns}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Foreground="{Binding Color}" Text="{Binding Text}"/>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate >
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<!--<Run Foreground="Red" Text="{Binding foo}"/>
<Run Foreground="Green" Text="{Binding bar}"/>
<Run Foreground="Blue" Text="{Binding baz}"/>-->
</Paragraph>
并将 MyRuns
定义为 View 模型中的集合,例如
public ObservableCollection<RunData> MyRuns { get; set; }
将属性放入您的 RunData
等中。
你当然可以删除 ItemsControl.ItemsPanel
,那只是为了好玩
关于c# - 绑定(bind)运行次数可变的 RichTextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947880/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!