컨트롤에 컨트롤 넣기 DataTemplate, FrameworkElementFactory
Program/C# 2008. 3. 7. 12:30리스트 뷰 칼럼에 체크 박스를 넣는 방법에 대해서 알아 보겠습니다.
자료를 찾아보면 이를 Xaml 코드로 수행하는 방법에 대해서는 쉽게 보실 수 있을 겁니다.
전 코드로 이러한 작업을 하는 방법에 대해 알아보죠..
우선 수행순서를 알아보면..(일부순서는 바뀌어도 됩니다.)
1. 컬럼의 생성
col = new GridViewColumn();
col.Header = "사용";
2. 데이터 템플릿 생성
DataTemplate dt = new DataTemplate();
3. 컬럼에 데이터 템플릿 연결
col.CellTemplate = dt;
4. 팩토리 생성
FrameworkElementFactory Factory = new FrameworkElementFactory(typeof(CheckBox));
5. 데이터 템플릿에 연결
dt.VisualTree = Factory;
6. 원하는 프로프티(값)을 팩토리에 바인딩
Bind = new Binding("isuse");
Bind.Converter = new IsUseChkConvert();
Factory.SetBinding(CheckBox.IsCheckedProperty, Bind);
Factory.AddHandler(CheckBox.LoadedEvent, new RoutedEventHandle(Check_Load));
프로퍼티에 값을 기록 하는 것 이외에 런타임 이벤트 또한 생성 할 수가 있습니다.
이런 식으로 해당 컨트롤에 대한 이벤트를 추가 하여도 되고
로드 이벤트만 걸어주고 로드 이벤트 핸들러 내에서 런타임 이벤트를 생성해도 됩니다.
아무래도 이 방법이 좀더 친숙하겠죠 ^^;
제가 설명한 예제는 리스트 뷰의 컬럼에 체크 박스를 넣는 내용입니다.
여기서 주목할 것은
DataTemplate, FrameworkElementFactory 클래스 입니다.
http://msdn2.microsoft.com/ko-kr/library/system.windows.frameworkelementfactory.aspx
위 링크의 내용을 보면 Xaml 이 아닌 코드로의 사용은 비추천 한다고 나오네요.
하지만 테크니컬한 조작을 하지 않는다면 큰 무리는 없어보입니다.
http://msdn2.microsoft.com/ko-kr/library/system.windows.datatemplate.aspx
위 링크는 데이터 템플릿에 대한 글입니다.
내용을 읽어 보시면 System.Windows..::.FrameworkTemplate 클래스를 상속받는군요..
팩토리는 프렘웍 템플릿을 상속받은 템플릿에는 적용이 가능하다..??
'Program > C#' 카테고리의 다른 글
Shallow Vs Deep Copy 깊은 복사 (0) | 2008.03.07 |
---|---|
CreateDirectory 사용권한 (0) | 2008.03.06 |
클래스의 XML 문서화. (0) | 2008.03.05 |