๐ ๏ธ WPF ๊ฐ๋ฐ, โwpfuiโ์์ ์ค๋ ๋ ์ฒซ ๋ง๋จ๊ณผ ์์ธ์ ๋๊ด
์ต๊ทผ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ WPF๋ก ์ธ๋ จ๋ UI๋ฅผ ๊ตฌํํ๊ณ ์ถ์ ์ด๋ง์ด ์๊ฒผ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค Fluent Design System ์คํ์ผ์ ์ปจํธ๋กค์ ์ ๊ณตํ๋ โwpfuiโ๋ผ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊น๋ํ ๋์์ธ๊ณผ ๋ฐ์ด๋ ์ฌ์ฉ์ฑ์ ๋งค๋ฃ๋์ด ์ฃผ์ ์์ด ํ๋ก์ ํธ์ ๋์ ํ๊ฒ ๋์์ต๋๋ค.
์ด๊ธฐ์๋ ๋ง์กฑ์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ ์ค, ํน์ ์ปจํธ๋กค์์ ์์์น ๋ชปํ ๋์์ ๋ฐ๊ฒฌํ๊ณ ์์ํด์ก์ต๋๋ค. ๋ฐ๋ก SplitButton์์ ๋ฐ์ํ ์ด์ ํ์์ด์์ต๋๋ค.
๐คจ SplitButton, ๊ธฐ๋์ ๋ฌ๋๋ ์๋ ๋ฐฉ์์ ํผ๋
์ ๊ฐ ๋ง์ฃผ์น ๋ฌธ์ ๋ SplitButton์ Flyout(ํ์ ๋ฉ๋ด) ์๋ ๋ฐฉ์์ ์์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก SplitButton์ ๋ ๊ฐ์ distinctํ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฉ์ธ ๋ฒํผ ์์ญ์ ํด๋ฆญํ๋ฉด ํน์ ๊ธฐ๋ฅ์ด ์คํ๋๊ณ , ์ค๋ฅธ์ชฝ์ ์์ ํ ๊ธ ๋ฒํผ ์์ญ์ ํด๋ฆญํ๋ฉด Flyout์ด ์ด๋ฆฌ๋ ๊ฒ์ด standardํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋๋ค.
ํ์ง๋ง โwpfuiโ์ SplitButton์ ์์ ํ ๋ฌ๋์ต๋๋ค. ํ ๊ธ ๋ฒํผ ์์ญ์ ํด๋ฆญํ์ ๋ ๊ฐํน ๋ฉ์ธ ๋ฒํผ์ ์ปค๋งจ๋๊ฐ ์คํ๋๊ฑฐ๋ Flyout์ด ์ด๋ฆฌ์ง ์๋ ํ์์ด ์ง์์ ์ผ๋ก ๋ฐ์ํ์ต๋๋ค. ์ฒ์์๋ ์ ์ฝ๋์์ SplitButton์ ์ด๋ฒคํธ๋ฅผ ์๋ชป ์ฒ๋ฆฌํ๋ ์์ฌํ๋ฉฐ ์ฌ๋ฌ ์ฐจ๋ก ๋๋ฒ๊น ์ ์๋ํ์ต๋๋ค. ํ์ง๋ง ์ฝ๋๋ฅผ ์๋ฌด๋ฆฌ ๊ผผ๊ผผํ ์ดํด๋ณด์๋ ์ ์ค์๋ก ๋ณด์ด์ง ์์์ต๋๋ค.
๊ฒฐ๊ตญ โwpfuiโ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ์ฝ๋๋ฅผ ์ง์ ํํค์น๊ฒ ๋์์ต๋๋ค. ControlTemplate๊ณผ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ก์ง์ ๋ฉด๋ฐํ ์ถ์ ํ์ฌ ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ์ ์ฐพ์๋ผ ์ ์์์ต๋๋ค.
๐จ ๋ฌธ์ ์ ํต์ฌ: ํด๋ฆญ ์์ญ ์ ํ๊ณผ Flyout์ ๋ถ์์ฐ์ค๋ฌ์ด ๋์
๊ธฐ์กด ๊ตฌํ์์๋ ๋ฒํผ์ ๋งค์ฐ ์ ํ๋ ๋ถ๋ถ, ํนํ ํ ์คํธ๊ฐ ํ์๋๋ ์์ญ์ ์ ํํ ํด๋ฆญํด์ผ๋ง Flyout์ด ์ ์์ ์ผ๋ก ์ด๋ฆฌ๋๋ก ๋์ด ์์์ต๋๋ค.
๐ ๋ฌธ์ ํ๋ฉด:
์ด๋ ์ฌ์ฉ์์๊ฒ ๊ทน๋๋ก ํผ๋์ค๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ต๋๋ค. ํ ๊ธ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์์์น ๋ชปํ ๋์(๋ฉ์ธ ์ปค๋งจ๋ ์คํ ๋๋ ์๋ฌด ๋ฐ์ ์์)์ผ๋ก ์ธํด UI๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค.
โ๏ธ ControlTemplate ์์ ์ผ๋ก ํด๊ฒฐ, ๋น๋ก์ ์ฐพ์์จ ์์ํจ
์ํฉ์ด ๋์ ํ ๊ฐ์ ๋ ์ ์๋ค๊ณ ํ๋จํ๊ณ , โwpfuiโ์ ์์ค ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ SplitButton์ ControlTemplate์ ์ง์ ์ฌ์ ์ํ๊ณ ๋ง์ฐ์ค ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์์ ์์ ํ์ต๋๋ค.
ํต์ฌ์ ํ ๊ธ ๋ฒํผ์ ์ด๋ ์์ญ์ ํด๋ฆญํ๋๋ผ๋ ์ผ๊ด์ ์ผ๋ก Flyout์ด ์ด๋ฆฌ๋๋ก ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์์ต๋๋ค. ์ฌ๋ฌ ๋ฒ์ ์๋ ๋์ ์ํ๋ ๋๋ก ๋์ํ๋๋ก ์์ ํ์ ๋, ๋ง์์ ๊น์ ๊ณณ์์ ์์ํจ์ ๋๊ผ์ต๋๋ค.
๐ ์์ ํ ํ๋ฉด:
๋ง์นจ๋ด ์ ๊ฐ ๊ธฐ๋ํ๋ ์์ฐ์ค๋ฌ์ด SplitButton์ ๋์์ ๊ตฌํํ ์ ์์์ต๋๋ค.
๐ ๋๋ง์ ํด๊ฒฐ์ฑ ์ ๋์ด, ์คํ์์ค ๊ธฐ์ฌ๋ก ๋ฐ๊ฑธ์์ ๋ด๋๋ค
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ, ๋ค๋ฅธ ์ฌ์ฉ์๋ค๋ ์ด์ ์ ์ฌํ ์ด๋ ค์์ ๊ฒช์์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
ํธ๊ธฐ์ฌ์ โwpfuiโ์ GitHub ์ ์ฅ์๋ฅผ ๋ฐฉ๋ฌธํด Issues ๋ชฉ๋ก์ ์ดํด๋ณด์๊ณ , ๊ณผ์ฐ ์ ๊ฐ ๊ฒช์ ๊ฒ๊ณผ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ ์ด์๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ณ ์์ง ํด๊ฒฐ๋์ง ์์ ์ํ์์ต๋๋ค!
์ด๋ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ค๋ฅธ ์ฌ์ฉ์๋ค์๊ฒ๋ ์ค์ง์ ์ธ ๋์์ด ๋ ์ ์์์ ์๋ฏธํ์ต๋๋ค. ์ฆ์ ์คํ์์ค ํ๋ก์ ํธ์ Pull Request(PR)๋ฅผ ํตํด ๊ธฐ์ฌํ ๊ธฐํ๋ผ๊ณ ํ๋จํ์ต๋๋ค.
์์ ํ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก โwpfuiโ ์ ์ฅ์๋ฅผ ํฌํฌํ๊ณ , ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๊ณ ํธ์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ์ด์๋ฅผ ์ฐธ์กฐํ๋ ํํ๋ก PR์ ์์ฑํ์ต๋๋ค.
๐ PR ํ๋ฉด:
PR ํ ํ๋ฆฟ์ด ์ ๊ตฌ์ฑ๋์ด ์์ด ๋ฌธ์ ์ค๋ช ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์ธํ ์์ฑํ๋ ๋ฐ ํฐ ์ด๋ ค์์ด ์์์ต๋๋ค. ์ ๊ฐ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐํ ์์ ๋ฌธ์ ๊ฐ ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ ์ ์๋ค๋ ์ฌ์ค์ ๋ฟ๋ฏํจ์ ๋๊ผ์ต๋๋ค.
โณ Merge๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ์คํ์์ค ์ปจํธ๋ฆฌ๋ทฐํฐ๊ฐ ๋๋ ๊ฟ
์ด์ ์ ๊ฐ ์ ์ถํ PR์ด ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ ๋ณํฉ(Merge)๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. GitHub์ ์์ฌ ์๋ ์๋ง์ PR๋ค์ ๋ณด๋ฉฐ โ์ธ์ ์ฏค ๋ด PR์ด ๊ฒํ ๋ ๊น?โ ํ๋ ์๊ฐ๋ ๋ค์ง๋ง, ์ ๊ฐ ์์ ํ ์ฝ๋๊ฐ ๋ฐ์๋์ด โwpfuiโ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์๊ฒ ๋์์ด ๋๊ณ , ๋์๊ฐ ์ด ํ๋ฅญํ ์คํ์์ค ํ๋ก์ ํธ์ ๊ณต์ Contributor ๋ชฉ๋ก์ ์ ์ด๋ฆ(์์ด๋)์ด ์๊ฒจ์ง๋ ๋ ์ ๊ฐ์ ํ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค!
๋น๋ก ์์ ๊ธฐ์ฌ์ผ์ง๋ผ๋, ์ ๊ฐ ๊ฒช์ ๋ถํธํจ์ ํด๊ฒฐํ๋ ๊ณผ์ ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ๊ธ์ ์ ์ธ ์ํฅ์ ์ค ์ ์๋ค๋ ์ฌ์ค์ ํฐ ๋ณด๋์ ๋๋๋๋ค. ์์ผ๋ก๋ ์คํ์์ค ํ๋์ ๊พธ์คํ ์ฐธ์ฌํ๊ณ ์ถ๋ค๋ ๋๊ธฐ ๋ถ์ฌ๊ฐ ๋ ๊ฒฝํ์ด์์ต๋๋ค. Merge๋๋ ๊ทธ๋ ๊น์ง ์ค๋ ๋ ๋ง์์ผ๋ก ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค!