C# 何时呈现自定义WPF文本块?
我应该什么时候在文本块中构建内联线?我有一个TextBlock派生类,当在某个字段中给定文本时,将其称为MyText,当MyText发生更改时,将文本转换为一组内联线 每当MyText发生更改时,我都会清除内联并构建它们,根据需要为每个单词着色。对于此示例,请考虑:C# 何时呈现自定义WPF文本块?,c#,wpf,rendering,textblock,C#,Wpf,Rendering,Textblock,我应该什么时候在文本块中构建内联线?我有一个TextBlock派生类,当在某个字段中给定文本时,将其称为MyText,当MyText发生更改时,将文本转换为一组内联线 每当MyText发生更改时,我都会清除内联并构建它们,根据需要为每个单词着色。对于此示例,请考虑: private void MyTextBlock_MyTextChanged(object sender, EventArgs e) { Inlines.Clear(); if (!string.IsNullOrEm
private void MyTextBlock_MyTextChanged(object sender, EventArgs e)
{
Inlines.Clear();
if (!string.IsNullOrEmpty(this.MyText))
{
var run = new Run();
run.Foreground = Brushes.DarkRed;
run.Text = this.MyText;
Inlines.Add(run);
}
}
这项工作非常有效。然而,最近我们将控件放入数据网格中,一些奇怪的事情开始发生。显然,DataGrid交换了上下文,在大多数情况下,这是可行的。然而,当我们从DataGrid ItemsSource中添加或删除数据时,出现了一些错误,TextChanged似乎没有被调用,或者至少没有被同时调用。MyText可以是一个值,内联线可以是空的,也可以是不同的值
我认为构建内联线的位置不是在MyTextChange期间,而是在控件开始呈现时。当DataContextChange时,我也尝试过,但这没有帮助
在我的构造函数中,我有
this.myTextDescriptor = DependencyPropertyDescriptor.FromProperty(
MyTextProperty, typeof(MyTextBlock));
if (this.myTextDescriptor != null)
{
this.myTextDescriptor.AddValueChanged(this, this.MyTextBlock_MyTextChanged);
}
对应于类中的依赖项属性
public string MyText
{
get { return (string)GetValue(MyTextProperty); }
set { SetValue(MyTextProperty, value); }
}
public static readonly DependencyProperty MyTextProperty =
DependencyProperty.Register("MyText", typeof(string), typeof(MyTextBlock));
private readonly DependencyPropertyDescriptor myTextDescriptor;
更新:如果有任何线索的话,问题的DataGrid单元格似乎是那些在添加或删除时不在屏幕上的单元格。我也尝试了一个应用程序模板,但没有帮助
更新2:也许更好的解决方案是创建可绑定的内联线?数据网格将其内容虚拟化,因此如果一行不可见,则不会加载该行。在这种情况下,您是否也尝试过在事件触发时重建内联线