컨트롤에 컨트롤 넣기 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
: