Share via


XAML 및 공백

XAML에서 사용하는 공백 처리 규칙에 대해 알아봅니다.

공백 처리

XML과 일관되게 XAML의 공백 문자는 공백, 줄 바꿈 및 탭입니다. 이들은 각각 유니코드 값 0020, 000A 및 0009에 해당합니다. 기본적으로 이 공백 정규화는 XAML 프로세서가 XAML 파일의 요소 간에 발견된 내부 텍스트를 발견할 때 발생합니다.

  • 동아시아 문자 사이에서 줄 바꿈 문자가 제거됩니다.
  • 모든 공백 문자(공백, 줄 바꿈, 탭)는 공백으로 변환됩니다.
  • 모든 연속 공백은 삭제되고 공백 하나로 대체됩니다.
  • 시작 태그 바로 뒤의 공백은 삭제됩니다.
  • 종료 태그 바로 앞의 공백은 삭제됩니다.
  • 동아시아 문자는 U+20000 - U+2FFFD 및 U+30000 - U+3FFFD 범위의 유니코드 문자 세트로 정의됩니다. 이 하위 집합을 한중일 한자라고도 합니다. 자세한 내용은 http://www.unicode.org를 참조하세요.

"기본값"은 xml:space 특성의 기본값으로 나타내는 상태에 해당합니다.

내부 텍스트 및 문자열 기본 형식의 공백

위의 정규화 규칙은 XAML 요소 내의 내부 텍스트에 적용됩니다. 정규화 후에 XAML 프로세서에서는 모든 내부 텍스트를 다음과 같이 적절한 형식으로 변환합니다:

  • 속성 형식이 컬렉션이 아니지만 직접 Object 형식이 아니면 XAML 프로세서에서는 형식 변환기를 사용하여 해당 형식으로 변환하려고 합니다. 여기서 변환에 실패하면 XAML 구문 분석 오류가 발생합니다.
  • 속성 형식이 컬렉션이고 내부 텍스트가 연속(중간 요소 태그 없음)이면 내부 텍스트가 단일 String으로 구문 분석됩니다. 컬렉션 형식에서 String을 수락할 수 없는 경우 XAML 파서 오류도 발생합니다.
  • 속성 형식이 Object이면 내부 텍스트가 단일 String으로 구문 분석됩니다. 중간 요소 태그가 있는 경우 개체 형식이 단일 개체(String 또는 기타)를 의미하기 때문에 XAML 파서 오류가 발생합니다.
  • 속성 형식이 컬렉션이고 내부 텍스트가 연속이 아니면 첫 번째 하위 문자열이 String 으로 변환되고 컬렉션 항목으로 추가되고, 중간 요소가 컬렉션 항목으로 추가되고, 마지막으로 후행 하위 문자열(있는 경우)이 컬렉션에 세 번째 String 항목으로 추가됩니다.

공백 및 텍스트 콘텐츠 모델

실제로 공백 유지는 모든 가능한 콘텐츠 모델의 하위 집합의 경우에만 중요합니다. 해당 하위 집합은 몇몇 형식의 singleton String 형식 또는 전용 String 컬렉션, 혹은 기타 형식을 혼합한 String 을 사용한 리스트, 컬렉션, 혹은 사전 등의 콘텐츠 모델로 구성됩니다.

문자열을 사용할 수 있는 콘텐츠 모델의 경우에도 이들 콘텐츠 모델 내에서 기본 동작에 따라 나머지 공백을 의미로 처리하지 않습니다.

공백 유지

XAML 프로세서 공백 정규화의 영향을 받지 않는 최종 프레젠테이션을 위해 원본 XAML의 공백을 유지하는 몇 가지 기술이 있습니다.

xml:space="preserve": 이 특성은 공백을 유지해야 하는 요소의 수준에서 지정합니다. 코드 편집기 또는 디자인 화면에서 태그 요소를 시각적으로 직관적인 중첩으로 정렬하기 위해 추가할 수 있는 공백을 포함하여 모든 공백을 유지합니다. 해당 공백의 렌더링 여부는 포함하는 요소의 콘텐츠 모델에서 결정됩니다. 대부분의 개체 모델은 공백을 중요한 한 가지 방법으로 간주하지 않으므로 루트 수준에서 지정 xml:space="preserve" 하지 않는 것이 좋습니다. 문자열 내에서 공백을 렌더링하는 요소나 공백 의미 컬렉션인 요소의 수준에서만 구체적으로 특성을 설정하는 것이 좋습니다.

엔터티 및 줄 바꿈을 하지 않는 공백: XAML에서는 텍스트 개체 모델 내에 유니코드 엔터티를 배치할 수 있습니다. 줄 바꿈하지 않는 공백(UTF-8 인코딩)과 같은 전용 엔터티를 사용할 수 있습니다. 줄 바꿈하지 않는 공백 문자를 지원하는 서식 있는 텍스트 컨트롤을 사용할 수도 있습니다. 엔터티를 사용하여 들여쓰기 등의 레이아웃 특성을 시뮬레이트하는 경우 주의해야 합니다. 이는 엔터티의 런타임 출력은 패널 및 여백의 적절한 사용과 같은 일반적인 레이아웃 시스템에서 들여쓰기 결과를 생성하는 기능보다 더 많은 요소에 따라 달라지기 때문입니다.