1ํ WPF ์คํฐ๋ ๊ต์ก - ์คํ๋ผ์ธ (์ด์ฌ์
)
2023.02.11์ผ ํ ์์ผ 13:00~17:00 (4์๊ฐ)
๊ต์ก ๋ด์ฉ์ WPF ํค์๋๋ฅผ ํตํด WPF์ ์ฃผ์ ๊ธฐ์ ๋ค์ ๋น๋์
ํด๊ฐ๋ฉฐ ๋ฆฌ๋ทฐํด ๊ฐ๋ ๊ณผ์ ์ด์์ต๋๋ค.
- Project v
- Application v
- Window v
- StackPanel v
- Grid v
- Border v
- DataContext v
- Button v
- Property v
- Style v
- Template
- ControlTemplate
- ContententTemplate
- DataTemplate
- Binding
- Trigger
- IValueConverter
- CustomControl
- Themes
- Generic
1. Project
WPFํ๋ก์ ํธ๋ ๋ท๋ท ํ๋ ์์ํฌ ๋๋ ์ฝ์ด ์ ํ์ ๋ฐ๋ผ ๊ตฌ์กฐ์ ๊ตฌ์ฑ์ด ๋ฌ๋ผ์ง๋๋ค. ํ๋ ์์ํฌ์ ๊ฒฝ์ฐ์๋ ์๋์ฐ์ ์ค์น๋ ํ๋ ์์ํฌ DLL ์ฐธ์กฐ๋ฅผ ํตํด WPF๋ฅผ ์ฌ์ฉํ์ง๋ง ์ฝ์ด์ ๊ฒฝ์ฐ์๋ ํ๋ก์ ํธ ์์ฑ์ ํตํด ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
<TargetFramework>net8.0-windows</TargetFramework>
<UseWPF>True</UseWPF>
๊ทธ๋ฆฌ๊ณ ์๋ฌด๋ฆฌ ์ฝ์ด๋ผ ํ ์ง๋ผ๋ WPF๋ ์๋์ฐ์์๋ง ๋์์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ TargetFramework์์ -windows ์ต์
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ฐธ์กฐ ๋ฐฉ์๊ณผ ์ฝ์ด ์ ํ
๋ท๋ท ํ๋ ์์ํฌ์ ๋ท๋ท ์ฝ์ด์ ์ฐธ์กฐ ๋ฐฉ์์ WPF ํ๋ก์ ํธ์ ๊ตฌ์กฐ์ ๊ตฌ์ฑ์ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์
๋๋ค. ํ๋ ์์ํฌ์์๋ ์์คํ
์ ์ค์น๋ DLL์ ์ง์ ์ฐธ์กฐํ๋ ๋ฐ๋ฉด, ์ฝ์ด๋ NuGet ํจํค์ง๋ฅผ ํตํ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ฐจ์ด๋ ํ๋ก์ ํธ์ ์ค์ , ๋ฐฐํฌ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ ์ค๋ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
ํนํ ๋ท๋ท ์ฝ์ด๋ ๋ชจ๋์ฑ, ์ ์ง ๊ด๋ฆฌ์ ์ฉ์ด์ฑ, ๋ณด์์ฑ ๋ฐ ์ต์ .NET ๊ธฐ๋ฅ ์ ๊ทผ์ฑ ์ธก๋ฉด์์ ์ฐ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๊ธฐ์กด์ ๋ท๋ท ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ ์ค์ธ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ๋ท๋ท ์ฝ์ด๋ก์ ์ ํ์ ์ ๊ทน์ ์ผ๋ก ๊ณ ๋ คํด๋ณผ ํ์๊ฐ ์์ต๋๋ค. ์ ํ์ ํ๋ก์ ํธ๋ฅผ ๋์ฑ ํ๋์ ์ด๊ณ ์ ์ฐํ๊ฒ ๋ง๋ค ๋ฟ๋ง ์๋๋ผ, ํฅํ ํ์ฅ์ฑ ๋ฐ ๊ด๋ฆฌ ์ธก๋ฉด์์๋ ํฐ ์ด์ ์ ์ ๊ณตํ ๊ฒ์
๋๋ค.
ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ๊ณผ ํ๊ฒฝ์ ๋ฉด๋ฐํ ๊ฒํ ํ์ฌ, ์ฝ์ด ๊ธฐ๋ฐ์ผ๋ก์ ์ ํ ๊ฐ๋ฅ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค, ์ด๋ ๊ธฐ์ ์ ์ธ ๋ฐ์ ๋ฟ๋ง ์๋๋ผ ์ฅ๊ธฐ์ ์ธ ํ๋ก์ ํธ ์ ์ง ๊ด๋ฆฌ ์ธก๋ฉด์์๋ ์ด์ต์ด ๋ ๊ฒ์
๋๋ค. ์ด๋ฌํ ๊ฒฐ์ ์ ํ์ ๊ธฐ์ ์ญ๋๊ณผ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ(๋ ๊ฑฐ์ ๋ฑ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก, ๋ชจ๋ ์ฌํญ๋ค์ ํ์ธํ ํ์ ์งํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
2. Application
Application ํด๋์ค๋ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฐ ์ ์ญ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
-
์ ํ๋ฆฌ์ผ์ด์
์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ: WPF Application ํด๋์ค๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์๊ณผ ์ข
๋ฃ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ์ด๊ธฐ WPF ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ธ App.xaml ํ์ผ์ Application ์ธ์คํด์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์คํ๊ณผ ํจ๊ป ๋ด๋ถ์ ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ Application์ ์ง์ ๋งค๋ด์ผ๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์์์ ์์ Application์ ์ง์ ์ธ์คํด์ค ์์ฑ ๋ฐ Run ์คํํด์ผ ํฉ๋๋ค.
-
์ ์ญ ๋ฆฌ์์ค ๊ด๋ฆฌ: ๊ธฐ๋ณธ ๊ตฌ์ฑ์ธ App.xaml์ ์ฌ์ฉํ ๊ฒฝ์ฐ Resources ์ปฌ๋ ์
์์์ ์ ์ญ ์คํ์ผ ๋ฆฌ์์ค๋ค์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋งค๋ด์ผ๋ก ํด๋์ค๋ง ๊ตฌํํ ๊ฒฝ์ฐ ์ธ์คํด์ค์ ์ง์ ์ ๊ทผํ์ฌ .Resources์ ๋ฆฌ์์ค๋ฅผ ํฌํจ์ํค๊ฑฐ๋ ResourceDictionary๋ฅผ ๋ณํฉ(Merge)ํ ์ ์์ต๋๋ค. ๋ง์ฝ ์ฌ๋ฌ๋ถ์ด DynamicResource์ ํน์ฑ์ ์ด์ฉํด์ ํ
๋ง ๋๋ ๋ค๊ตญ์ด ์ฒ๋ฆฌ์ ๊ฐ์ ๊ธฐ์ ์ ๊ตฌํํ๋ค๋ฉด ResourceDictionary๋ฅผ ์ค์์นญํ ์ ์์ด์ผ ํ๊ฒ ์ฃ .
-
๋ฉ์ธ ์๋์ฐ ์ค์ ๋ฐ ์คํ: Application ํด๋์ค๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ์ธ ์๋์ฐ๋ฅผ ์ค์ ํ๊ณ ์คํํ ์ฑ
์์ด ์์ต๋๋ค. MainWindow ์์ฑ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฃผ ์๋์ฐ๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ, Run() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ง์ ๋ ์๋์ฐ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด๋ OnStartup ์ด๋ฒคํธ๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ์ปค์คํ
๋ก์ง์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. MainWindow ์์ฑ์ ์ง์ ํ ๋นํ์ง ์๋ ๊ฒฝ์ฐ, Run() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํด ์๋์ผ๋ก ์ฒซ ๋ฒ์งธ ์์ฑ๋ ์๋์ฐ๊ฐ MainWindow์ผ๋ก ์ง์ ๋ฉ๋๋ค.
-
์ข
๋ฃ ์กฐ๊ฑด ์ค์ : ShutdownMode ์์ฑ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃ ์กฐ๊ฑด์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ShutdownMode.OnMainWindowClose ์ต์
์ ์ ํํ๋ฉด ๋ฉ์ธ ์๋์ฐ๊ฐ ๋ซํ ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ์๋์ผ๋ก ์ข
๋ฃ๋ฉ๋๋ค. ๋ค๋ฅธ ์ต์
์ผ๋ก๋ ShutdownMode.OnLastWindowClose๊ฐ ์์ด ๋ชจ๋ ์๋์ฐ๊ฐ ๋ซํ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ์ด ์ต์
์ ์ ํ ์ฌ์ฉํ์ง ์์ ์๋ ์์ต๋๋ค.
-
์ด๋ฆ ํผ๋ ์ฃผ์: ํ๋ก์ ํธ์์ ์๋์ผ๋ก ์์ฑ๋๋ MainWindow.xaml ํ์ผ์ ๋จ์ํ WPF์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์ด๋ฆ์ผ ๋ฟ์ด๋ฉฐ, Application ํด๋์ค์ MainWindow ์์ฑ๊ณผ๋ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฅผ ํผ๋ํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ์ด๋ฐ ์คํด๋ฅผ ์ค์ด๊ธฐ ์ํด ์๋์ ์ผ๋ก ์๋์ฐ ์ด๋ฆ์ MainWindow๊ฐ ์๋ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ํ๋ ํธ์
๋๋ค.
3. Window
Window๋ Application์ ํตํด ์ฒ์ ์์๋๋ ์๋์ฐ๋ฅผ ๋ง๋ค๊ฑฐ๋ ํ์
์ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ปจํธ๋กค์
๋๋ค. ์ด ํด๋์ค๋ ContentControl๋ฅผ ์์ ๋ฐ์ผ๋ฉฐ, FrameworkElement๋ก๋ถํฐ ํ์๋ ๋ชจ๋ ์ปจํธ๋กค ์ค์์ ์ ์ผํ๊ฒ Parent ์์ฑ์ ์ง์ ํ ์ ์๋ ํน๋ณํ ์ปจํธ๋กค์
๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ํต์ ์ธ ๋์์ธ์ ์๋์ฐ ์คํ์ผ์ ์ ๊ณต ๋ฐ์ง๋ง ContentControl์ ํน์ฑ์ ์ด์ฉํ์ฌ ์๋ก์ด ๋์์ธ์ ์๋์ฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค.
4. StackPanel
StackPanel์ ์ฃผ๋ก ํ ๋ฐฉํฅ์ผ๋ก ์์ ์์๋ค์ ์ ๋ ฌํ ํ์๊ฐ ์์ ๋ ์ฌ์ฉ๋๋ ๋ ์ด์์ ์ปจํธ๋กค์
๋๋ค. ์ด ์ปจํธ๋กค์ ํนํ ๊ฐ๋จํ ์ํฉ์์ ์ ์ฉํ๋ฉฐ, ListBox๋ DataGrid์ ๊ฐ์ ItemsPresenter๋ฅผ ํ์ฉํ๋ ItemsControl ๊ธฐ๋ฐ์ ์ปจํธ๋กค ๋ด์์ ์์ ์์๋ฅผ ์ถ๊ฐํ๋ ์ปจํ
์ด๋๋ก๋ ์์ฃผ ํ์ฉ๋ฉ๋๋ค.
StackPanel์ Orientation ์์ฑ์ ์์ ์์๋ค์ด ์ธ๋ก(Vertical) ๋๋ ๊ฐ๋ก(Horizontal) ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์ด๋๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ StackPanel ์ธ์ ๋ค๋ฅธ ์ปจํธ๋กค๋ค๋ Orientation ์์ฑ์ ํฌํจํ๊ณ ์์ด, ์์ ์์๋ค์ ๋ฐฐ์ด ๋ฐฉํฅ์ ์ ์ฐํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
์ด์ ํด๋นํ๋ ๋ํ์ ์ธ ํธ๋กค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ค ๊ฐ๊ฐ์ ํน์ ์ฌ์ฉ ์ํฉ์ ๋ฐ๋ผ UI ๊ตฌ์ฑ์ ๋งค์ฐ ๊ฐ๋ ฅํ ํธ์์ฑ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง Grid์ ๊ฐ์ ๋ ๋ณต์กํ๊ณ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ๋ ์ด์์ ์ปจํธ๋กค์ ์กด์ฌ๋ก ์ธํด, ๊ฐ์ธ์ ์ผ๋ก๋ StackPanel์ ๊ทธ๋ ๊ฒ ์์ฃผ ์ฌ์ฉํ์ง ์์ต๋๋ค. (๊ฐ์ธ ์ทจํฅ)
Orientation์ ์ฌ์ฉํ๋ WrapPanel๊ณผ UniformGrid์ปจํธ๋กค๋ ์์ฃผ ํน์ดํ๊ณ ์ฌ๋ฐ์ผ๋ StackPanel๊ณผ ํจ๊ป ์ดํด๋ณด๋ฉด ์์ฃผ ์ข์ต๋๋ค.
5. Grid
WPF ๋ ์ด์์ ์์์์ Grid์ ์กด์ฌ๋ ๊ฐ์ฅ ๋์ ๋น์ค๊ณผ ์ค์์ฑ์ ๊ฐ์ง๋๋ค. ํนํ ๋ชจ๋ ์๋๋ฆฌ์ค์์ ์ฌ์ฉ๋ ์ ์์ ์ ๋์ ์ ์ฐํจ๊ณผ ํ์ฅ์ฑ์ ๊ฐ์ง๋ฉฐ Canvas์ ๋๋ถ์ด ์ ์ผํ๊ฒ ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์ด ์๊ธฐ๋ ํฉ๋๋ค. ~StackPanel ๊ฐ์ ๊ฑด ๋นผ๊ณ ~
์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๊ณ์ธต ํํ์ ์ ํ์ ์ธ ๊ตฌ์กฐ์์ ๋ฒ์ด๋ ์ฐฝ์์ฑ์ ๋์ฑ ๋ฐํํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ์ปจํธ๋กค์ ํตํด ์ ์ ํ๊ฒ ๋ณต์กํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋จ์ํ๊ณ ๊ฐ๋
์ฑ ๋๊ฒ ๋ฆฌํํ ๋งํ ๋์๋ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
Grid๋ ํ๊ณผ ์ด์ (๊ฐ๊ฐ RowDefinition, ColumnDefinition)์ ์ํ ์ ์๋ ๊ฒ์ด ํน์ง์
๋๋ค. ๋ ๋์๊ฐ Width ๋๋ Height์ Stretch๋ฅผ ์์ ๋กญ๊ฒ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ ์ด์์ ์ค๊ณ๋ฅผ ํ ๋์๋ ๋งค์ฐ ํจ๊ณผ์ ์ด๊ณ ์ง๊ด์ ์
๋๋ค. ๋จ CSS์ ๊ฐ์ด ์กฐ๊ฑด๋ถ๋ก ๋ฐ์ํ ํฌ๊ธฐ ์ ์ด๋ฅผ ํ ์ ์๋ ์์ค ๊น์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ์ง ์์ต๋๋ค. ์ด๋ฐ ๋ถ๋ถ์ ์ง์ Grid๋ฅผ ์์ ๋ฐ์ ๊ตฌํํ๋ฉด ๋๊ฒ ์ต๋๋ค. (๋ง ์์ด๋์ด๊ฐ ๋ ์ค๋ฅด๋ค์.)
๊ทธ๋ฆฌ๊ณ Grid๋ Attached ํ์
์ Row/Column, RowSpan/ColumnSpan ๊ณผ ๊ฐ์ ์์ฑ์ ์ ๊ณตํ์ฌ ์์ ์ปจํธ๋กค์์ ์ค์ ์ ํ ์ ์๋๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์์์ ํ/์ด ์์น๋ฅผ ๊ฐํธํ๊ฒ ์ง์ ํ๋ ๊ฒ์ด ํน์ง์
๋๋ค.
Grid.Row
Grid.Column
Grid.RowSpan
Grid.ColumnSpan
WPF ์
๋ฌธ์๋ผ๋ฉด Grid๋ ์ง๋ฆฌ๋๋ก ํด๋ ์ข์ผ๋ ๋ ์ด์์์ ๋ค์ํ๊ฒ ๋ง๋ค์ด๋ณด๊ธฐ๋ฅผ ๊ถํฉ๋๋ค.
6. Border
Border ์ปจํธ๋กค์ WPF์์ ์๊ฐ์ ์ผ๋ก ํํํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋์์ธ ์์ ์ค ํ๋์
๋๋ค. ์ด ์ปจํธ๋กค์ ๋จ์ํ ๊ฒฝ๊ณ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ผ์ธ์ ๋์์ธ์ ์์๋ก ํ์ฉํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ํ ์์ ์์๋ฅผ ํฌํจํ ์ ์์ด, ๋ฉ์ธ ๋ ์ด์์์ ๊ฒฝ๊ณ์ , ItemsControl ๊ธฐ๋ฐ ์ปฌ๋ ์
์ ๊ตฌ๋ถ, GroupBox ์์ญ, Button์ ๊ฒฝ๊ณ, TextBox์ ํฌ์ปค์ค ์์ญ ๋ฑ ๋ค์ํ ์์์ ํ์ฉ๋ฉ๋๋ค. ํ๋ก์ฐธ์๋ฌ
Border๋ Grid์ ๊ฐ์ Panel์์ ํ์๋์ง ์๋ ๋
๋ฆฝ์ ์ธ Decorator ์ปจํธ๋กค๋ก, ์์์ ์ค์ฒฉํด์ ๋ค๋ฃฐ ์๋ ์์ง๋ง, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Grid์ ํจ๊ป ์ฌ์ฉ๋์ด ๋ ํ๋ถํ ๋ ์ด์์ ๊ตฌ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ด ์ปจํธ๋กค์ Background์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๋์์ธ ์์๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ๋ ์ด์์ ํด๋์ค์์๋ ์ฐพ์๋ณผ ์ ์๋ ํน๋ณํ ์์ฑ๋ค์ ์ ๊ณตํฉ๋๋ค.
- BorderThickness
- BorderBrush
- CornerRadius
- Background
Border ์ปจํธ๋กค์ ๋งค๋ ฅ์ ๊ทธ ์ ์ฐ์ฑ์ ์์ต๋๋ค. BorderThickness ์์ฑ์ ์กฐ์ ํ์ฌ ํ
๋๋ฆฌ์ ๋๊ป๋ฅผ ์์ ๋กญ๊ฒ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋์์ธ์ ๋ฐ๋ผ ์ธ๋ฐํ๊ฒ ์กฐ์ ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋๊ป๋ฅผ ์กฐ์ ํ์ฌ ๋์ฑ ๋๋ ทํ๊ฒ ํ
๋๋ฆฌ๋ฅผ ๊ฐ์กฐํ๊ฑฐ๋, ๋ฏธ๋ฌํ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ธ๋ จ๋ ๋๋์ ์ค ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ BorderBrush ์์ฑ์ ์ด์ฉํด ์์์ ์ ํํ๊ฑฐ๋, ๊ทธ๋ผ๋ฐ์ด์
์ ์ ์ฉํ์ฌ ์ฌ๋ฏธ์๋ ์คํ์ผ์ ๊ตฌํํ ์ ์์ต๋๋ค.
Border์ ํน์ฑ๊ณผ ์ค์ฒฉ์ ์ ํํํ ์ํ์ด ๋ง์นจ ์์ด์.
๋จ ์์์ ํ ๊ฐ์ง ์์ผ๋ก๋ง ๊ฐ๋ฅํ๋ค๋,
Html์์๋ border-top, border-left ์ด๋ฐ ์์ผ๋ก ๊ฐ๊ฐ ์ง์ ํ ์๋ ์์ฃ , ์ฆ WPF์์๋ ์ด์ ๊ฐ์ด ๊ตฌํํ๊ธฐ ์ํด์๋ Border๋ฅผ ์ฌ๋ฌ ๊ฐ ์ค์ฒฉํ์ฌ ํํํ๋ ๋ฐฉ์์ผ๋ก ํด์ผ ํฉ๋๋ค.
CornerRadius ์์ฑ์ Border์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌํ์ฌ ๋ถ๋๋ฌ์ด ๋๋์ ์ค ์ ์์ต๋๋ค. ์ด๋ ๋์์ธ์ ๋ฐ๋ผ ํด๋์ํ๊ฑฐ๋ ํ๋์ ์ธ ๋๋์ ์ค ์ ์์ด, ๋ค์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค์ด๋ด๋ ๋ฐ ์์ฃผ ์ ์ฉํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, WPF์์๋ ๋๋ถ๋ถ์ ์ปจํธ๋กค๋ค์ด ๊ฒฝ๊ณ์ ์ ์ง์ ์ ์ผ๋ก ํํํ ์ ์๊ธฐ ๋๋ฌธ์ Border๋ฅผ ๋ค์ํ๊ฒ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฅผ ํตํด CustomControl๊ณผ ๊ฐ์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ปจํธ๋กค์ ๊ตฌํํ ๋๋ ๋ ํ๋ถํ๊ณ ๋ค์ํ ์๊ตฌ์ฌํญ์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํด ๋ผ ์ ์์ต๋๋ค.
7. DataContext
WPF์ DataContext๋ ๋งค๋ ฅ์ ์ธ ์ํคํ
์ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ์ง์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฐ์ฑ, ํ์ฅ์ฑ๊ณผ ๊ฐ์ ์ค๊ณ ์ ์ธ ๋ฉด์ ์์ด ํต์ฌ์ ์ธ ์์๋ก ์ฌ์ฉ๋ฉ๋๋ค. DataContext๋ฅผ ์ด์ฉํ๋ฉด ๋จ์ํ ๊ฐ์ฒด๋ถํฐ ์์ํ์ฌ ๋ฌธ์์ด, ์ ์, ์ธ์คํด์ค ๊ฐ์ฒด, ViewModel, ์ฌ์ง์ด๋ ์ปจํธ๋กค๊น์ง ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ด๋ MVVM ํจํด์ ํตํด ๋ฐ์ดํฐ์ UI๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๋ถ์ฐํ ๊ฐ๋ฐ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
๋ฟ๋ง ์๋๋ผ, DataContext๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ํตํด ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ถ๋ชจ ์์์ DataContext๊ฐ ์์ ์์์๊ฒ ์์๋๋ ํน์ฑ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์
๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ฝ๊ฒ ํ์
ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
DataContext๋ ์์ ์๊ฒ ์ง์ ํ ๋น๋ ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ ๋ ์์์ ๋ถ๋ชจ ์์์ DataContext๋ฅผ ์ฐพ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ ์์๋ค์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ ์์์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
DataContext์ ๋ฐ์ดํฐ ์ ํ๋ ์ผ์ข
์ ์์ ์ฒด์ธ์ผ๋ก ์ดํดํ ์ ์์ผ๋ฉฐ, ๊ฐ ์์๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ ์์์์ ์ฐพ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ ์ฐํ ํ์ฉ๊ณผ ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ์ ๋์ด๋ ๋ฐ ์์ด ํต์ฌ์ ์ธ ์์์
๋๋ค.
๊ทธ๋ฌ๋ DataContext์ ํ์์ ์์ ๊ณ์ธต์ผ๋ก์ ๋ฐ์ดํฐ ์ ํ์๋ง ์ ์ฉ๋ฉ๋๋ค. ํ์ ๊ณ์ธต์ด๋ ๊ฐ์ ๋ ๋ฒจ์ ์์๋ก์ ํ์์ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ฌํ ์์
์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์์กด์ฑ ์ฃผ์
, ์ด๋ฒคํธ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
MVVM ํจํด๊ณผ ๋ชจ๋ํ๋ฅผ ํตํ ํ๋ ์์ํฌ ์ค๊ณ๋ฅผ ์ ํด๋ด๊ธฐ ์ํด์๋ DataContext์ ๊ฐ๋
์ ๋ํด ๊ณ์ํด์ ์ฐ๊ตฌํด๋๊ฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. DataContext๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ํ์ฉํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํคํ
์ฒ๋ฅผ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๋ฐ ์์ด์ ํต์ฌ์ ์ธ ๋ถ๋ถ์
๋๋ค. ์ฌ๋ฐ๋ฅธ DataContext์ ์ฌ์ฉ์ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์ฃผ๋ฉฐ, ๋ํ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ DataContext๋ฅผ ์ดํดํ๊ณ ์ด๋ฅผ ๊น์ด ์๊ฒ ํ์ฉํ๊ธฐ ์ํด ๋
ธ๋ ฅํด์ผ ํฉ๋๋ค. DataContext์ ๊ฐ๋
์ ์ง์์ ์ผ๋ก ์ฐ๊ตฌํ๊ณ ํ์ฉํ์ฌ MVVM ํจํด๊ณผ ๋ชจ๋ํ๋ฅผ ํตํ ํ๋ ์์ํฌ ์ค๊ณ๋ฅผ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
8. Button
Button์ ์ค๊ณ ๊ตฌ์กฐ๋ WPF์ ๋ฐฉํฅ์ฑ๊ณผ ๊ทธ ์ฒ ํ์ ๋ฐ์ํฉ๋๋ค. Button์ ContentControl ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ค์ํ ํํ์ ์ฝํ
์ธ ๋ฅผ ๋ด์ ์ ์๋ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฅผ ํตํด ๋ฌธ์์ด, ์ด๋ฏธ์ง, ๋๋ ๋ ๋ณต์กํ ๋ ์ด์์์ Button์ ๋ด์ฉ์ผ๋ก ์ฝ๊ฒ ํ ๋นํ ์ ์์ต๋๋ค.
๋ ๋์๊ฐ, Template ์์ฑ์ ํตํด Button์ ์ธํ์ ์๋ฒฝํ๊ฒ ์ ์ดํ๊ณ ์ฌ๊ตฌ์ฑํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด์ ๊ฐ์ ์ค๊ณ์ ์๋ฆฌ๋ Button์๋ง ๊ตญํ๋์ง ์๊ณ WPF์์ ์ ๊ณตํ๋ ๊ฑฐ์ ๋ชจ๋ ์ปจํธ๋กค์ ์ ์ฉ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์, Button์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ ์ฌ์ฉ์ํ(customizing)ํ๋ ์ฐ์ต์ WPF๋ฅผ ์ดํดํ๊ณ ๋ฐฐ์ฐ๋ ๋ฐ ์์ฃผ ์ข์ ์ถ๋ฐ์ ์ด ๋ ๊ฒ์
๋๋ค.
Button์ 'Clickโ์ด๋ผ๋ ์ค์ํ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ์ด๋ฒคํธ๋ ๋ด๋ถ์ ์ผ๋ก Button์์ MouseDown๊ณผ MouseUp ์ด๋ฒคํธ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์ํ ํ์ ์ฒ๋ฆฌ๋ฉ๋๋ค. Button์ ์ด ๋ง์ฐ์ค ์ด๋ฒคํธ๋ค์ ๋ด๋ถ์ ์ผ๋ก (Click์ ์ํด) ์๋นํ๋ฏ๋ก, ์์ ์ปดํฌ๋ํธ๋ก์ ์ถ๊ฐ์ ์ธ ์ด๋ฒคํธ ์ ํ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฒ๋ธ๋ง/ํฐ๋๋ง์ ํธ๋ค๋งํ ๋ Button ์์๊ฐ ์ค๊ฐ์ ํฌํจ๋์ด ์๋ค๋ฉด ์ด๋ฅผ ์ฃผ์ํด์ผ ํฉ๋๋ค. ๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก Click ์ ICommand๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์๋๋ก Command ์์ฑ๋ ์ ๊ณตํ๊ณ ์๊ธฐ ๋๋ฌธ์ MVVM ํจํด์์๋ ์ด๋ฒคํธ ๋ก์ง์ ViewModel๋ก ์์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, Button ์ปจํธ๋กค์ ํตํด ContentControl ๊ตฌ์กฐ์ ๋ํด ๊น์ด ์๊ฒ ์ฐ๊ตฌํ๊ณ ๋ค์ํ๊ฒ ๊ตฌํํด๋ณธ๋ค๋ฉด WPF ๊ธฐ์ ๋ ฅ์ ๋์ด๋ ๋ฐ ์์ด ์์ฃผ ์ค์ํ ๊ฒ์
๋๋ค.
9. Property
WPF์์์ ์์กด์ฑ ํ๋กํผํฐ ์ฌ์ฉ
WPF์์ ์ปจํธ๋กค์ ์์กด์ฑ ํ๋กํผํฐ๋ฅผ ํตํด ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. XAML์์ ์ปจํธ๋กค์ Background, Margin, Content ๋ฑ์ ์๊ฐ์ ์ธ ์์ฑ์ ์ผ๋ฐ์ ์ธ ํ๋กํผํฐ๊ฐ ์๋ ์์กด์ฑ ํ๋กํผํฐ๋ก ์ค์ ๋๋ฉฐ, ์ด๋ฅผ ํตํด XAML ์์์ ์์ฑ ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ ํ๋กํผํฐ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ด๋ถ์ ์ผ๋ก ์ฝ๋ฐฑ ์ด๋ฒคํธ๋ฅผ ์ ์ํ ์ ์๋๋ก ๋์ด์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ์ ๋๋ฉ์ด์
๊ฐ์ WPF์ ํต์ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฏ๋ก, ๋ณต์กํ๊ณ ํ๋ถํ UI ๊ตฌํ์ ์ํด ํ์์ ์
๋๋ค.
๋ทฐ๋ชจ๋ธ๊ณผ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ (์ผ๋ฐ ํ๋กํผํฐ)
๋ทฐ๋ชจ๋ธ์์ ์ฌ์ฉ๋๋ ์ผ๋ฐ ํ๋กํผํฐ์ (UI ์ปจํธ๋กค) ์์กด์ฑ ํ๋กํผํฐ ๊ฐ์ ์ฐ๊ฒฐ์ WPF์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ๋ทฐ๋ชจ๋ธ ๋ด ํ๋กํผํฐ๋ INotifyPropertyChanged ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๊ฐ ๋ณ๊ฒฝ์ ์๋ฆด ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด UI์ ๋ฐ์ธ๋ฉ์ด ๋ ์์กด์ฑ ํ๋กํผํฐ ์์ฑ ๊ฐ์ด ๋์ ์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ทฐ๋ชจ๋ธ์์๋ ์์กด์ฑ ํ๋กํผํฐ๊ฐ ์๋ ์ผ๋ฐ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ํํ ์ค์ ํ๋ ํผ๋ ์ค ํ๋์
๋๋ค.
์ฃผ์ ์์กด์ฑ ํ๋กํผํฐ์ ์ฌ์ฉ ๋ฐ ๊ณ์ธต์ ์ค๊ณ ์ดํด
DataContext, Background, Content, Margin๊ณผ ๊ฐ์ ์ฃผ์ ์์กด์ฑ ํ๋กํผํฐ๋ค์ FrameworkElement์ Control ํด๋์ค์์ ํ์๋๋ฉฐ, ์ด๋ฌํ ํ๋กํผํฐ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ดํฐ ํํ๊ณผ ๋ ์ด์์ ๊ตฌ์ฑ์ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค. ์์กด์ฑ ํ๋กํผํฐ๋ฅผ ๋ค์ํ๊ฒ ์ปค์คํฐ๋ง์ด์งํ๋ ๊ฒ๋ ์ ์ฉํ์ง๋ง, ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ์ ์ดํดํ๊ณ ๊ธฐ์กด์ ์์กด์ฑ ํ๋กํผํฐ๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ์ ๊ทผ๋ฒ์ WPF์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ ์ ์ดํดํ๊ณ ๋ค๋ฃฐ ์ ์๊ฒ ํด ์ค๋๋ค.
์ด๋ฌํ ์์กด์ฑ ํ๋กํผํฐ๋ค์ WPF์ ํน์ง์ ์ธ ๋ถ๋ถ์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ์ธ๋ฐํ๊ณ ํจ์จ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์ต๋๋ค. ํ๋กํผํฐ๋ค์ ๊ณ์ธต์ ๊ตฌ์กฐ์ ํน์ฑ์ ์ดํดํ๊ณ ํ์ฉํ๋ ๊ฒ์ WPF ๊ฐ๋ฐ์์ ์ค์ํ ๊ธฐ์ ์
๋๋ค. ์ด๋ฌํ ์ดํด๋ ํจ๊ณผ์ ์ธ ์ปค์คํ
์ปจํธ๋กค ๊ฐ๋ฐ์๋ ๋์์ด ๋ฉ๋๋ค.
10. Style
FrameworkElement๋ ์ปจํธ๋กค์ ๋ชจ๋ ์์ฑ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ Style์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ FrameworkElement์์ ํ์๋ ๋ชจ๋ ํด๋์ค๋ ์ด ์คํ์ผ์ ํ์ฉํ ์ ์์ต๋๋ค.
์คํ์ผ์ ์ปจํธ๋กค์ ์ง์ StaticResource ๋๋ DynamicResource๋ฅผ ์ ์ฉํ๊ฑฐ๋, App.xaml์ด๋ Application.Resources ์ปฌ๋ ์
์ x:Key๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์คํ์ผ์ ์ถ๊ฐํจ์ผ๋ก์จ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.
// ๊ธฐ๋ณธ App.xaml:
<Application>
<Application.Resources>
</Application.Resources>
</Application>
// ๋งค๋ด์ผ App:
internal class App : Application
{
public App()
{
// Resources.Add(์คํ์ผ ๋ฆฌ์์ค);
// ๋๋
// Resources.MergedResourceDictionaries.Add(๋ฆฌ์์ค ๋์
๋๋ฆฌ);
}
}
๋ํ,CustomControl์ Generic.xaml์ ํตํด ๊ธฐ๋ณธ ์คํ์ผ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค (์ด์ ๋ํ ์ค๋ช
์ ํ๋ฐ๋ถ์ ์์ต๋๋ค).
DynamicResource ์์ฉ
ํ
๋ง๋ ๋ค๊ตญ์ด ๊ตฌํ์ ์ํด DynamicResource๋ฅผ ์ฌ์ฉํ ๋, ResourceDictionary๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๊ณ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ ์ฐํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ App.xaml์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ ๋งค๋ด์ผ App ํด๋์ค ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ์ฌ ResourceDictionary์ ๋ฑ๋ก๊ณผ ์ ๊ฑฐ๋ฅผ ์ง์ ์ ์ฐํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ์ํ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
์๊ฐํด๋ณด๋ ResourceDictionary๋ฅผ ์ค์์นญ ํ๋ ํธ๋ฆฌ๊ฑฐ ํํ์ ์คํ์ผ์ ๋ง๋ค์ด๋ณด๋ ๊ฒ๋ ์์ฃผ ์ ์ฉํ ๊ฒ ๊ฐ๋ค์?
๋ค๋ง ์ ๋ ๊ฐ์ธ์ ์ผ๋ก CustomControl์ ํตํ ๋ชจ๋ํ, ๋ถ์ฐํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํคํ
์ฒ ์ค๊ณ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๊ณต์ฉ๋ฆฌ์์ค๋ฅผ ๋๋ฆฌ๋ ๊ฒ๋ณด๋ค๋ CustomControl์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ์์ ์ ํธํฉ๋๋ค.
๊ด๋ จ ๋งํฌ ๋ณด๊ธฐ