WPF์ ํฐ ์ฅ์ ์ด XAML์ ์ด์ฉํ์ฌ ์๊ฐ์ ์ผ๋ก ํํ์ด ์ ์ฐํ Windows Desktop App ๊ฐ๋ฐ์ ํ ์ ์๋ค๋ ์ ์ธ๋ฐ์, ์ด ์๊ฐ์ ์ผ๋ก ํํ์ด ์ ์ฐํ ๋ ๋ฒจ์ด ๋๋ ค๋ฉด XAML์ ๋ฌ๋์ปค๋ธ๊ฐ ์ข ์๋ ๊ฑฐ ๊ฐ์ต๋๋ค. ์ด์ ๊ฐ WPF๋ฅผ 1๋ ๋จ์ง ํ ์ ๋ก์๋ ContentPresenter๋ ์ข ์ด๋ ค์ด ๊ฐ๋ ์ธ๋ฐ์.
WPF์ ์ปจํธ๋กค์ ๋ฌด์กฐ๊ฑด ContentControl, ItemsControl๋ฅผ ์์๋ฐ์ ๊ตฌํ๋์๋ค๊ณ ์๊ณ ์์ต๋๋ค.
ContentControl์ ํ์ ์ปจํธ๋กค์ ๋ฑ 1๊ฐ ๋ฐ์ ์ ์๋ ์ปจํธ๋กค์ด๊ณ , ItemsControl์ ํ์ ์ปจํธ๋กค๋ก Collectionํํ์ ๋ค์์ Item์ ๋ฐ์ ์ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ผ๋ฉฐ, ์ด ๋ ํ์ ์ปจํธ๋กค์ ๋ํ ํํ ํ์์ DataTemplate์ผ๋ก ์ฌ๋ฌ Control๋ค์ ์กฐํฉํ์ฌ ํํํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ์ ์ด๋ณด๋ค์ด ์ด๋ฐ ๊ถ๊ธ์ฆ์ ๊ฐ๋ ๋ฏ ํฉ๋๋ค. DataTemplete์ผ๋ก ์ปจํธ๋กค๋ค์ ์กฐํฉํ์ฌ ์์ ๋กญ๊ฒ ํํ์ด ๊ฐ๋ฅํ๋ฐ ๋๋์ฒด ControlTemplate์ ์ธ์ ์ฐ๋๊ฑฐ์ง? ์ค์ ๋ก ์ ๊ฐ์ ์ด๋ณด๋ฅผ ๋ง์ด๋ณด์ง๋ง ์ ๋ ๋ชฐ๋ผ์ ๋ต๋ณ์ ๋ชปํ๊ณ ์์ต๋๋ค.
์ฐพ์๋ณด๋ Winform์์ OnPaint๊ฐ์ ๋ฉ์๋๋ก ์ปจํธ๋กค์ ๋ค์ ๊ทธ๋ฆฌ๋ฏ, ์ปจํธ๋กค์ ์ํ์ ๋ญ๊ฐ๋ฒ๋ฆฌ๊ณ ์์ ํ ์๋ก์ด ํํ์ ์๊ฐ์ ์ปจํธ๋กค๋ก ํ๋ฐ๊ฟ ์ํฌ ๋ ControlTemplate์ ์ฐ๋ ๊ฒ ๊ฐ์์ต๋๋ค. ๊ทธ๋์ ์์ง ์ด๋ณด์์ค์ด๋ผ ์ปจํธ๋กค์ ํํ๋ฅผ ๋ฐ๊ฟ ๋ฒ๋ฆด ๋งํผ์ ์๊ฐ์ ์ ๋ฌด๋ ๋ชปํ๋๋ฐ๋ค ์ฐ์ ์ฉ ํ๋ก๊ทธ๋จ์ด๋ค๋ณด๋ ๊ทธ๋ฅ ์ด๋ฐ๊ฑฐ๋ค๋ง ํ๊ณ ๋์ด๊ฐ๋๋ฐ์.
DevExpress๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์ ๋ก ๋ฐ์ ์ํ์ด ๊ฐ๋จํ๊ฒ ๋นจ๊ฐ ํ ๋๋ฆฌ๋ง ์น๋ ๊ฒ์ธ๋ฐ ControlTemplate์ ์ฌ์ฉํด์ ์ ์๋ฅผ ํ๊ณ , ContentPresenter๋ฅผ ์ฐ๊ณ ์์์ต๋๋ค. ContentPresenter๋ผ๋ ๊ฒ์ ์ฒ์ ๋ณธ ๊ฒ์ ์๋์ง๋ง, ์ดํดํ๊ธฐ ์ด๋ ค์์ ์ผ๋จ ๋์ด๊ฐ๊ณ ์์๋๋ฐ, ๋ง์ ์์ ๋ก ๋ฐ์๋ณด๋ ์ด์ ๋ ์์์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์ด๊ฒ์ ๊ฒ ์๋ฃ์กฐ์ฌ๋ฅผ ํด๋ดค์ต๋๋ค. ํ์ง๋ง ์์ง ์ดํด๊ฐ ์ข ํ๋ค์์ต๋๋ค.
์ฌ๋ฌ ์์ ๋ค์ ๋ณด๋ ๋ณธ ์์ ์ค์์๋ ControlTemplate์ ContentPresenter๋ 1:1๋ก ๊ผญ ๋ถ์ด ๋ค๋๋ฉด์ ControlTemplate์ ์ฌ์ฉํด์ ์ฌ์ ์ํ ๊ฒ์ ๊ทธ๋ฅ <ContentPresenter /> ์ด๊ฑฐ ํ ์ค๋ก ํํํด์ฃผ๋ ๋๋์ด์์ต๋๋ค. ์ฌ์ฉ๋ฒ์ด ์ข ์ดํด๊ฐ ์ ๊ฐ๋๊ฒโฆ์ฌ์ ์ํ XAML์ ๊ฐ์ฅ ์์ชฝ์ <ContentPresenter/>์ด๊ฑฐ๋ง ์ฐ๋๊ฑฐ ๊ฐ๋๋ฐ XAML์ ์ด๋๋ถ๋ถ์์ ์ ์ฝ๋๋ฅผ ์จ์ผํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํน์ ControlTemplate๊ณผ ContentPresenter์ ๋ํด ์ด๊ฑฐ๋ค! ๋ผ๊ณ ์ค๋ช ์ด ๊ฐ๋ฅํ ์ํฐํด์ด ์์๊น์? ์์ผ๋ฉด ๋งํฌ ๋ถํ๋๋ฆฌ๊ณ โฆ์ค๋ช ๋ ๋ถ๊ฐ์ ์ผ๋ก ํด์ฃผ์ ๋ค๋ฉด ๊ฐ์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.