2011-06-04 75 views
0

什麼時候應該在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:也許更好的解決方案可能是創建可綁定的內聯?

回答

0

DataGrids虛擬化其內容,所以如果一行不可見,它將不會被加載。既然如此,當Loaded事件觸發時,您是否嘗試過重建內聯?