TextBlock의 NoWrap, Wrap, WrapWithOverflow 속성값에 대하여
- WrapWithOverflow
영어의 경우 sapce가 없는채로 쭉 이어지면 overflow되지만, 한글의 경우 overflow 시키지 않고 다음줄로 내린다.
Grid Basic
- Grid의 경우 행과 열이 0부터 시작한다.
- 배열 범위를 벗어났으면 벗어난 방향에 따라 맨 처음이나 맨 끝에 배치된다. (에러 메세지는 출력하나, 실행은 된다.)
- <Grid.Column/RowDefinitions>는 <Grid> 안에서 한 번만 가능하다.
- cell size auto로 지정 시, Row나 Column의 사이즈는 content 사이즈에 맞춰지고 contents가 많으면 window에서 overflow 발생한다.
- cell absolute sizing 시, Row나 Column 사이즈가 window보다 크면 overflow 발생.
StackPanel/WrapPanel
DockPanel
- 코드 순서대로 쌓이면서 적용된다. 다른 방향으로 먼저 쌓인 Border가 있으면 다음 Border는 이전 Border의 영역을 침범하지 않는 선에서 공간을 차지한다.
Resource
- Local Resource와 Global Resource의 이름이 동일하다면, Local Resource가 우선적으로 적용된다.
Trigger
- Trigger를 통해 속성을 바꾸려고 하는 대상이 있을 때, 대상 선언과 함께 지정한 속성 값은 Trigger에서 바뀌지 않는다.
ValueConverter
- BooleanToVisibilityConverter 클래스 구현 안해도 그냥 바뀌는데...?
- BooleanToVisibilityConverter 클래스가 제공되는 클래스라서 그랬던 것이다. 만약 UserBooleanToVisibilityConverter 라고 클래스를 구현했으면,
<local:UserBooleanToVisibilityConverter x:Key="boolToVis"/>
위와 같이 써야 local에 구현한 클래스를 참조 가능하다.
XamlSpecificStuff (x 키워드)
마크업 확장식
중괄호({})로 감싸진 어트리뷰트를 만날때마다, XAML 컴파일러나 파서는 문자열이 아니라 마크업 확장식의 처리대상으로 생각한다.
이미 존재하는 다른 객체를 참조할 때 사용하거나, 런타임에 값이 변경되는 개체에 대한 지연된 참조를 하기 위해서 사용한다.
루트 요소에 x:Class를 추가하면 XAML 컴파일러는 마크업에 정의된 Partial 클래스를 생성한다. 그런 후에 코드 바하인드 파일에 동일한 클래스의 다른 부분을 구현할수 있다. 컴파일 시점에 컴파일러는 이 두 코드를 하나의 완전한 클래스로 통합한다.
Binding, StaticResource 등에 x 키워드를 붙이지 않는 것은 http://schemas.microsoft.com/winfx/2006/xaml/presentation에 선언되어 있기 때문이다.
ItemSource
ItemSource를 한번 설정하면 컬렉션의 data를 삽입/삭제했다고 바로 update 되는게 아니다. ItemSource를 null로 설정한 다음에 다시 바인딩해야 update가 구현된다.
바인딩 된 컬렉션의 data가 정상적으로 삽입/삭제가 되었어도 UI에서는 변경사항을 인식하지 못하기 때문에 update가 되지 않는 것이다.
컨트롤의 update를 위해 컬렉션에서의 변화를 감지하려면 대상 컬렉션이 INotifyCollectionChanged 인터페이스를 구현하고 있어야 한다. 보통은 *ObservableCollection<T>*을 이용한다. *ObservableCollection<T>*는 INotifyCollectionChanged, INotifyPropertyChanged 인터페이스를 구현한다.