티스토리 뷰

WindowsPhone

WP7 개발 기초 - Content에 관한 속성

생각많은 소심남 2012. 1. 10. 00:55
지난 시간에 했던 내용을 계속 이어서 나가겠습니다. 

 
이와 관련된 TextBlock의 속성을 주기 위해서는 다음과 같이 구성했습니다.

 
멀리서 보면 저 GradientStop을 표현하기 위해서 조금 길게 쓴거 같은 느낌이 듭니다. 그런데 Xaml의 특성상 컬렉션 내에 지금처럼 여러개의 특성이 들어가면 컬렉션에 대한 태그는 삭제해줘도 된답니다. 말로 표현하면 다음과 같이 되는거죠. 
 


그리고 여기서 한 줄 더 줄일 수 있습니다.  GradientBrush안에 속에 파생되어있는 클래스라면 따로 태그를 붙일 필요가 없는겁니다. 지난 시간에도 잠깐 언급이 되었지만 GradientBrush안에 Radial 이나 Linear에 관한 클래스가 있고 그안에 또 GradientStops에 관한 클래스가 나와 있는 것을 알 수 있습니다.


지금 위와같은 화면은 reference에서 System.Windows를 찾아서 확인한 결과입니다.

잘 이해가 안가시는 분이면 msdn 라이브러리를 참고하시면 좋을거 같습니다. 그래서 다음과 같이 또 줄어듭니다.


이렇게 해도 맨처음 내용과 동일한 내용이 됩니다. 

Background에 관한 내용도 수정해봅니다.


그럼 TextBlock을 두개넣으려면 어떻게 할까요? 그냥 단순하게 똑같은 구문만 삽입하면 될까요? 
물론 배경을 먼저 넣고 TextBlock을 넣거나 TextBlock을 넣고 배경을 넣어도 됩니다.

딱 신경쓸 점은 배경관련 항목이 여러 TextBlock을 작성하는 가운데에 있으면 안된다는 겁니다.
가령 이렇게 말이지요.


 오류도 다음과 같이 뜹니다. 

 
여기서 우리는 이전에 다뤘던 내용에 대해 상기해볼 필요가 있습니다. 얼핏 흘려 말하기로는 앞에서 정의된 내용을 뒤에서 반복으로 정의하면 안된다. 라고 언급한 적이 있습니다.

ContentPanel안에 들어가는 TextBlock은 어떻게 보면 Panel안에 들어가는 Content 요소중의 하나입니다. 만약 이 TextBlock을 여러개 만든다면 물론 그 요소의 물질적 갯수는 늘겠지요. 하지만 Content를 구성하는 요소에는 TextBlock이라고 정의된거 하나일 뿐입니다. 책에서는 Grid내에 Children이란 컬렉션을 따로둬서 이 TextBlock이란 요소를 한꺼번에 묶었습니다. 즉 정답을 말하자면


이렇게 정의되어야 할게 
위와 같이 중간에 배경을 정의해버리면


 이렇게 중복해서 정의되는 경우가 발생하는 겁니다.

음... 위와 같은 경우를 지난번에 언급했던 것처럼 서랍장으로 표현해보겠습니다.
일단 이제 각 서랍에 이름표를 달았으므로 효율적으로 정리하기 위해서는 Children이란 서랍에 TextBlock을 여러개 넣어야 보기가 깔끔해집니다. 그런데 위처럼 같은 서랍을 여러개 만들어버리면 끝에는 필요없는 서랍이 남게 됩니다. 그안에 있는데 Data역시 쓰레기가 되지요.

어떻게 보면 참 Silverlight라는 것이 참 직관적이라는 느낌을 받습니다. 따로 Collection이라는 개념을 둬서 같은 성격을 지닌 것끼리는 묶을 수도 있고, 각각에 대한 세부사항 역시 설정할 수 있습니다. 이를 통해서 동일한 작업을 반복할 필요가 없어집니다.
이같이 좋은 기능을 써먹기 위해서는 개발자는 리소스를 구별하는 법을 알아야 합니다. 이번 예제를 통해서 봤던 것처럼 Grid의 Children collection에 어떤게 포함되고 중복되는것은 포함시켜서 공유하는 방안에 대해서 잘 숙지를 해야 합니다. 책에서 그 부분을 따로 Resource Collection이란 파트로 빼서  쭉 설명하고 있습니다.

흔히 개발때 사용하는 건 Brush에 관한 항목을 공유하는 것입니다. 그래서 이 부분에 대한 내용을 다음 포스팅에서 다뤄보고자 합니다. 

댓글