我应该何时在TextBlock中构建内联?我有一个TextBlock派生类,当在某个字段中给出文本时,将其称为MyText,在MyText发生更改时将文本转换为一组内联。
每当MyText发生变化时,我都会清除Inlines并构建它们,根据需要为每个单词着色。对于此示例,请考虑:
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);
}
}
这非常有效。但是,最近我们将Control放入DataGrid,并且一些奇怪的事情已经开始发生。显然,DataGrid交换了上下文,并且大多数情况下这都有效。但是,当我们从DataGrid ItemsSource添加或删除数据时,出现问题,而TextChanged似乎不会被调用(或者至少不会同时调用)。 MyText可以是一个值,Inlines可以是空白或不同的值。
我认为构建Inlines的地方不是在MyTextChanged期间,而是在Control的渲染开始时。我也曾尝试过DataContextChanged,但这没有用。
在我的构造函数中,我有
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单元格似乎是在添加或删除发生时屏幕外的问题。我也试过OnApplyTemplate,但这没有帮助。
Update2:也许更好的解决方案可能是创建可绑定的内联?