2013-07-23 33 views
0

我想更改邊框日期選擇器的顏色,我看到了在xaml代碼中更改的解決方案,但希望將其更改爲後端。爲日期選擇器後端的文本框着色WPF

我的代碼:

public static bool checkDate(DatePicker dpk) 
{ 
    TextBox tb = (TextBox)dpk.Template.FindName("PART_TextBox", dpk); 
    Border bd = (Border)tb.Template.FindName("Bd", tb); 

    if (dpk.SelectedDate == null) 
    { 
     bd.BorderBrush = Brushes.Red; 
     return false; 
    } 

    bd.BorderBrush = Brushes.Black; 
    return true; 
} 

我使用

Border bd = (Border)tb.Template.FindName("Bd", tb); 

我其他的文本框等沒有任何問題。但我得到一個nullException錯誤時着色,顯然它無法檢測邊界日期選擇器在此代碼行處使用的文本框。有什麼建議?

+0

哪一行代碼拋出一噸null異常?我嘗試了它,並在我的情況下工作得很好。 – Nitesh

回答

0

如果我正確理解你的意圖,你試圖做一些數據驗證並突出顯示缺少的字段。下面的示例應該可以工作;有沒有必要進一步看起來比文本框部分

public static bool checkDate(DatePicker dpk) 
    { 
     TextBox tb = (TextBox)dpk.Template.FindName("PART_TextBox", dpk); 

     if (dpk.SelectedDate == null) 
     { 
      tb.BorderThickness = new Thickness(2); 
      tb.BorderBrush = Brushes.Red; 
      return false; 
     } 

     tb.BorderThickness = new Thickness(0); 
     tb.BorderBrush = Brushes.Black; 
     return true; 
    } 

在未來,請嘗試使用http://snoopwpf.codeplex.com/查看可用的零件/運行時性能 - 它可以節省您的時間

+0

如果你正在設置:BorderThickness = new Thickness(0);,那麼爲什麼你需要BorderBrush = Brushes.Black; ?如果厚度爲零,它沒有設置BorderBrush的意義。 – Nitesh

+0

因爲我真的不知道代碼的初衷?這只是一個示例 - 您可以通過操縱厚度或顏色並將其他屬性設置爲其他位置的固定值來獲得相同的效果;我選擇離開這兩個OP選擇 –

+0

這沒有任何意義。 OP要求他無法從ControlTemplate中找到一些模板部件並獲取空值。 – Nitesh