성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>WPF - CellPadding 속성을 구현하는 Grid Layout</div><br /> <br /> HTML Table을 다뤄보신 분들은 WPF의 Grid를 보면서 CellPadding 기능을 아쉬워할 것입니다. 저뿐만 아니라 많은 분들이 공감하고 있는데요.<br /> <br /> 이에 대한 해결책으로 검색해 봐도 딱히 신통치 않습니다.<br /> 그나마 검색되는 사이트가 ... 오호... 뜻밖에도 국내 블로거의 글입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Layout System in WPF : 프롤로그 ; <a target='_tab' href='http://illef.tistory.com/tag/cellpadding'>http://illef.tistory.com/tag/cellpadding</a> </pre> <br /> 위의 글을 쓴 "illef" 님은 최근에 상속을 통해서 CellPadding을 구현한 것을 내부 공개를 했는데 ... 저도 다른 식으로 한번 해결해 보고 싶어서 이거저거 뚝딱거려 보았습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 우선, 해결을 위한 "생각"은 간단합니다. Grid에 추가되는 1차 자식노드들에 대해서 Margin을 적용하면 그만인 것입니다. 생각이 간단한 만큼, 구현도 간단하게 끝납니다. 왜냐하면, Grid는 이런 경우를 위해 아래와 같은 메서드를 virtual로 제공해 주고 있기 때문입니다. (엄밀히, Panel 수준에서 제공됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > protected virtual UIElementCollection <b style='color: Blue;'>CreateUIElementCollection</b>(FrameworkElement logicalParent); </pre> <br /> CreateUIElementCollection 메서드를 재정의하면 우리가 만든 UIElementCollection을 반환해 줄 수가 있습니다. <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > protected override UIElementCollection CreateUIElementCollection( FrameworkElement logicalParent) { return new <b style='color: Blue;'>MarginUIElementCollection</b>(logicalParent); } </pre> <br /> UIElementCollection 정의를 기억하시는 분들은 이쯤에서 무릎을 탁 치시겠죠. ^^ 아래의 코드를 보시면 대강 이해가 되실 겁니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > public class MarginUIElementCollection : UIElementCollection { public MarginUIElementCollection(FrameworkElement logicalParent) : base(logicalParent,null) { } public override int Add(UIElement element) { FrameworkElement childElement = element as FrameworkElement; <b style='color: Blue;'>childElement.Margin = new Thickness(3.0);</b> return base.Add(element); } } </pre> <br /> 이렇게 해서, Grid의 Children 컬렉션에 유지되는 1차 자식 요소들에 대해서는 단일하게 Margin이 지정이 되어 HTML 테이블의 CellPadding과 동일한 효과가 발생합니다.<br /> <br /> 아래는 적용된 예를 보여주고 있습니다.<br /> <br /> [그림 1: CellPadding == 3]<br /> <img alt='wpf_grid_cellpadding_1.png' src='/SysWebRes/bbs/wpf_grid_cellpadding_1.png' /><br /> <br /> [그림 2: CellPadding == 10]<br /> <img alt='wpf_grid_cellpadding_2.png' src='/SysWebRes/bbs/wpf_grid_cellpadding_2.png' /><br /> <br /> <a target='_tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?wid=734&boardid=331301885'>첨부된 파일</a>은 위에서 설명한 기본 동작외에 의존 속성을 함께 정의한 예제입니다.<br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2052
(왼쪽의 숫자를 입력해야 합니다.)