什麼時候應該在TextBlock中構建內聯?我有一個TextBlock派生類,當給定文本在某個字段中時,將其稱爲MyText,當MyText發生更改時,將文本轉換爲一組內聯。何時呈現自定義WPF TextBlock?
每當MyText發生變化時,我都清除內聯並構建它們,根據需要對每個單詞着色。對於這個例子,考慮:
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將上下文切換出來,大部分情況下都可以工作。但是,當我們從DataGrid ItemsSource添加或刪除數據時,出現錯誤,並且TextChanged看起來並不像它被調用(或者至少沒有被同時調用)。 MyText可以是一個值,Inline可以是空白或不同的值。
我認爲構建內聯的地方不在MyTextChanged期間,但可能在控件的渲染開始時。我也試過當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:也許更好的解決方案可能是創建可綁定的內聯?