2013-01-03 57 views
1

我有一個關於在WPF網格中命名SharedSizeGroups的問題,大多出於好奇。我注意到MSDN他們列出了該組的字符串名稱限制:SharedSizeGroup命名規則

的SharedSizeGroup屬性值必須滿足下列規則:

  • 不能爲空。
  • 只能由字母,數字和下劃線字符組成。
  • 不得以數字值開頭。

我有一些團體,我命名爲數字(「1」,「2」,「3」等)和從未有過的問題與他們。只是爲了踢球,我將一些團體重新命名爲「, - []」,並且他們仍然工作。所以這些規則不是強制執行的,看起來不是必需的。有人知道文檔中規則的原因嗎?這些名稱是否可能與WPF在內部做的事情發生衝突?

編輯:好吧,所以WPF確實強制執行它,驗證只是不會在我的非編譯模板中觸發。

回答

3

有趣的是,我看了一下ReflectionBase中的DefinitionBase類和SharedSizeGroup屬性。

它創建一個依賴屬性定義爲以下驗證回調:

SharedSizeGroupProperty = DependencyProperty.Register("SharedSizeGroup", typeof(string), typeof(DefinitionBase), new FrameworkPropertyMetadata(new PropertyChangedCallback(DefinitionBase.OnSharedSizeGroupPropertyChanged)), new ValidateValueCallback(DefinitionBase.SharedSizeGroupPropertyValueValid)); 


private static bool SharedSizeGroupPropertyValueValid(object value) 
    { 
     if (value == null) 
     { 
      return true; 
     } 
     string str = (string)value; 
     if (str != string.Empty) 
     { 
      int num = -1; 
      while (++num < str.Length) 
      { 
       bool flag = char.IsDigit(str[num]); 
       if (((num == 0) && flag) || ((!flag && !char.IsLetter(str[num])) && ('_' != str[num]))) 
       { 
        break; 
       } 
      } 
      if (num == str.Length) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

我測試了這一點,它實際上返回false含非數字,非字母,非下劃線什麼字符。對於任何以數字開頭的組,它也會返回false。所以它似乎遵循一般的變量名稱規則。

我的猜測是這很可能會拋出某種異常,但也許正在處理。你檢查過輸出窗口嗎?

我試着一個無效的名字,並且我得到了一個XAMLParseException。

+0

Verrry確實有趣。這顯然不是我期待的。我違規的所有網格恰好嵌入在DataTemplates中,所以我直接在窗口的xaml中嘗試了它,並且也得到了XAMLParseException。加載模板時,輸出窗口中沒有任何興趣。 – Jelly

+0

你碰巧知道在非編譯xaml模板被加載時是否應該觸發ValidateValueCallbacks?我試圖查看這個,但是我找不到任何說明不會的文檔。 – Jelly

+0

@Jelly不,我不知道,但說實話,我不確定爲什麼這個問題不僅僅是好奇而是重要的。我的意思是......你不會用無效的角色給你的團隊命名,是嗎? – Alan