2013-01-03 2 views
1

WPF 그리드에서 주로 호기심 때문에 SharedSizeGroups이라는 이름을 지정하는 것에 관한 질문이 있습니다.SharedSizeGroup 명명 규칙

SharedSizeGroup 속성 값은 다음과 같은 규칙을 만족해야합니다 :

  • 은 비워 둘 수 없습니다 나는 그들이 그룹의 문자열 이름에 대한 제한을 나열하는 MSDN에 나타났습니다.
  • 문자, 숫자 및 밑줄 문자로만 구성되어야합니다.
  • 숫자로 시작하지 않아야합니다.

가 나는 수치라는 이름의 어떤 그룹 ("1", "2", "3", 등)이 그들과 함께 문제가 생긴 적이 없다. 킥을 위해서 몇몇 그룹을 ", - []"같은 것으로 이름을 바꾸었고 그들은 여전히 ​​효과가있었습니다. 따라서 이러한 규칙은 적용되지 않으며 필요하지 않은 것처럼 보입니다. 아무도 문서의 규칙에 대한 이유를 알고 있습니까? WPF가 내부적으로 수행하는 작업과 이름이 충돌 할 수 있습니까?

편집 : 그래, WPF가 결국 강제로 적용하므로 검증은 컴파일되지 않은 템플릿에서 실행되지 않습니다.

답변

3

흥미로운 점은 반사경 및 SharedSizeGroup 속성의 DefinitionBase 클래스를 살펴 보았습니다.

그것은 다음과 같이 정의 유효성 검사 콜백 종속성 속성을 생성

:

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. 분명히 내가 기대했던 것이 아닙니다. 규칙 위반이 일어나는 모든 Grid가 DataTemplates에 임베디드되기 때문에 창 xaml에서 직접 시도해 보았고 XAMLParseException도 얻었습니다. 템플리트가로드 될 때 출력 창에 아무런 관심이 없습니다. – Jelly

+0

컴파일되지 않은 xaml 템플릿이로드 될 때 ValidateValueCallbacks가 실행되는 것으로 알고 있습니까? 나는 이것을 보려고했지만, 그렇게하지 않을 것이라고 말하는 어떠한 문서도 찾을 수 없다. – Jelly

+0

@Jelly 아니,하지만 솔직히 말해서, 나는 왜 그 질문이 호기심보다 더 중요한 것인지 잘 모르겠다. 내 말은 .. 네 그룹을 잘못된 캐릭터로 지목하지 않았을거야, 그렇지? – Alan