Microsoft-ui-xaml: ์ œ์•ˆ: WinUI ์ปจํŠธ๋กค ์„ธํŠธ์— ์ต์ŠคํŒฌ๋” ์ปจํŠธ๋กค ์ถ”๊ฐ€.

์— ๋งŒ๋“  2020๋…„ 09์›” 11์ผ  ยท  82์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/microsoft-ui-xaml

์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋˜๋Š” API ์ œ์•ˆ์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์œ ํ˜•์— ๋Œ€ํ•œ ์ƒˆ API๋ฅผ ์ œ์•ˆํ•˜๊ฑฐ๋‚˜ ์ƒˆ UI ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UWP ๋˜๋Š” ์•ฑ ๋ชจ๋ธ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์ œ์•ˆ์˜ ๊ฒฝ์šฐ Project Reunion ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค. https://github.com/microsoft/ProjectReunion ๋ชจ๋“  ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์š”์•ฝ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ ๊ทผ๊ฑฐ. ์ด ๋งํฌ๋Š” WinUI ๊ธฐ๋Šฅ/API ์ œ์•ˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. https://github.com/Microsoft/microsoft-ui-xaml/blob/master/docs/feature_proposal_process.md

์ œ์•ˆ: WinUI ํ™•์žฅ๊ธฐ ์ œ์–ด

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ PR ๊ณผ ํ•จ๊ป˜ ์‚ฌ์–‘ ์ด ์—ด๋ ธ์Šต๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ† ๋ก ์„ ์ž์œ ๋กญ๊ฒŒ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค!

์š”์•ฝ

Windows ์ „์ฒด์—์„œ Windows ๋ณด์•ˆ, ์„ค์ •, ์‚ฌ์ง„, ๊ทธ๋ฆผํŒ 3D, ์•Œ๋ฆผ ์„ผํ„ฐ, 3D ๋ทฐ์–ด, ์•Œ๋ฆผ ๋ฐ UWP Onedrive ์•ฑ์—์„œ ๋‹ค์–‘ํ•œ ํ™•์žฅ๊ธฐ ์ปจํŠธ๋กค์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ์ผ๋ฐ˜์ ์ธ UX ํŒจํ„ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ๊ด€๋œ "Windows" ๋ฐฉ์‹์€ ์—†์Šต๋‹ˆ๋‹ค. Expander ์ปจํŠธ๋กค์€ ๋งŽ์€ ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•˜๊ณ  WPF์™€ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋ก ์  ํ•ด์„

  • ์ฝ˜ํ…์ธ ๋ฅผ ํ™•์žฅ ๋ฐ ์ถ•์†Œํ•˜๋Š” ๋‚ด์žฅ๋œ ์ผ๊ด€๋œ Fluent ๋ฐฉ์‹์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‚ด๋ ˆ์ดํ„ฐ ์นœํ™”์ , ํ‚ค๋ณด๋“œ ์ปจํŠธ๋กค, ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋””์ž์ธ ๋ฐ ๊ณ ๋Œ€๋น„ ๋ณ€๊ฒฝ์„ ํฌํ•จํ•˜์—ฌ ๋™์ž‘ ๋ฐ ์Šคํƒ€์ผ์ด ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋งŽ์€ ํ‘œ๋ฉด์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ฒ”์œ„


| ๊ธฐ๋Šฅ | ์šฐ์„ ์ˆœ์œ„ |
| :------------ | :--------- |
| WinUI ์•ฑ์—์„œ ์ผ๊ด€๋œ ํ™•์žฅ๊ธฐ ๋™์ž‘ ์ œ๊ณต | ํ•„์ˆ˜ |
| ์ปจํŠธ๋กค๊ณผ์˜ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์— ๋”ฐ๋ผ ํฌ๊ธฐ ํ™•์žฅ(๋‹ค๋ฅธ ์ฝ˜ํ…์ธ  ํ‘ธ์‹œ) ๋ฐ ์ถ•์†Œ | ํ•„์ˆ˜ |
| ๋น„ํ™•์žฅ ๋ฐ ํ™•์žฅ ์ฝ˜ํ…์ธ ์—์„œ Button, ToggleSwitch์™€ ๊ฐ™์€ ์ปจํŠธ๋กค ์ง€์› | ํ•„์ˆ˜ |
| 4๋ฐฉํ–ฅ ํ™•์žฅ ์ง€์› | ํ•ด์•ผ* |
| ํ™•์žฅ๋œ ์ƒํƒœ์˜ ๋ชจ๋“  ์ฝ˜ํ…์ธ (ํ—ค๋” ํฌํ•จ) ์ˆ˜์ • ์ง€์› | ์ˆ˜ |
| InfoBar ํ™•์žฅ ์ง€์›(๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ณต๊ฐœ ์งˆ๋ฌธ) | ์ˆ˜ |
| Expanders ์‚ฌ์ด์— "์•„์ฝ”๋””์–ธ ๋™์ž‘" ๋…ผ๋ฆฌ ํฌํ•จ | ํ•˜์ง€ ์•Š์„ |
| ๊ฐ€๋ณ๊ฒŒ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค | ํ•˜์ง€ ์•Š์„ |

*v1 Expander๋Š” ์•„๋ž˜์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ™•์žฅ๋˜๋„๋ก ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ down ๋ฐ ExpandDirection์ด ๋‚˜์ค‘์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ค‘์š” ์ฐธ๊ณ  ์‚ฌํ•ญ

์ œ์•ˆ๋œ API

Public enum ExpandDirection 
{ 
Down = 0 
Up = 1 
Left = 2 
Right = 3 
} 

public class Expander : ContentControl 
{ 
Expander(); 

public object Header {get;set;} 
public DataTemplate HeaderTemplate { get;set; } 
public DataTemplate HeaderTemplateSelector {get;set;} 

public static readonly DependencyProperty HeaderProperty; 
public static readonly DependencyProperty HeaderTemplateProperty; 
public static readonly DependencyProperty HeaderTemplateSelectorProperty {get;} 

public bool IsExpanded { get;set} 
public ExpandDirection ExpandDirection { get;set;} 

protected virtual void OnExpanded(); 
protected virtual void OnCollapsed();

public event Expanded; 
public event Collapsed; 

public static readonly DependencyProperty IsExpandedProperty; 
public static readonly DependencyProperty ExpandDirectionProperty; 
} 

Visual States:  
ExpandStates: Expanded/Collapsed 

Accessibility: 
Support Expand/Collapse pattern (IExpandCollapseProvider) 

๋‹ค๋ฅธ ๊ณณ์—์„œ ํ™•์žฅ๊ธฐ ์ปจํŠธ๋กค

ํ™•์žฅ๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์˜ˆ

expandcontrol-4 1
expandcontrol-2

์—ด๋ฆฐ ์งˆ๋ฌธ

  • WinUI ํŒ€๊ณผ์˜ ๋…ผ์˜์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ํ™•์žฅ๋˜๋Š” V1์€ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ Expander๋ฅผ ๋” ๋นจ๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ(์ง€๊ธˆ๊นŒ์ง€ Expander์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ชจ๋‘ ํ•˜ํ–ฅ ์กฐ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—) ๊ณ„ํš๋œ V2์—์„œ ExpandDirection์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณง๋ฐ”๋กœ. ์•ฑ์—์„œ Expander๊ฐ€ ์•„๋ž˜์ชฝ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
  • Expander๋Š” InfoBar์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? InfoBar์— ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? InfoBar๋ฅผ Expander์˜ ์ฝ˜ํ…์ธ ๋กœ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฐ˜์ „?
feature proposal team-Controls

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

WinUI ํ”„๋กœ์ ํŠธ @kat-y์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. Xaml์€ ์˜ค๋žœ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์•ฝ๊ฐ„ ๊ธฐ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WinUI๋Š” ์ž‘๋™ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ด์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ™•์žฅ๊ธฐ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์ปจํŠธ๋กค์ด๋ฏ€๋กœ WPF์—์„œ WinUI๋กœ์˜ ๊ฐ„๋‹จํ•œ ์ด๋™์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

@robloo XAML ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์—”์ง€๋‹ˆ์–ด๋งํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ท€ํ•˜์˜ ์ฃผ์žฅ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF AFAIR์—๋Š” WinUI/Fluent์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๋งŽ์€ ํฌ๋กฌ ์œ ์‚ฌ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Chevron ๋ฐ ํ„ฐ์น˜ ๋Œ€์ƒ ํฌ๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ธ€๊ผด ํฌ๊ธฐ ์กฐ์ • ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Chevron์€ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ํ…์ŠคํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ์•ž ์ชฝ์ด ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ํ–ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๊ตฌํ˜„๊ณผ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€ ์•Š๋Š” ํ•œ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒํƒœ๋งŒ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  82 ๋Œ“๊ธ€

Expander๋Š” ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ Windows Community Toolkit ๋ฒ„์ „์ด ์ถ”๊ฐ€๋œ ์ดํ›„๋กœ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐ”ํ€ด๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์žฌ๋ฐœ๋ช…ํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ํˆดํ‚ท์—์„œ ์ฝ”๋“œ๋ฅผ ํฌํŒ…ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ„์ „ 1.0์— ์™„๋ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ: 'MoreButton'์ด ์žˆ๋Š” ColorPicker๊ฐ€ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์„ ์ œ์ถœํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์ง„์ •ํ•œ Expander ์‹œ๋‚˜๋ฆฌ์˜ค์™€ Flyout/MenuFlyout ์‚ฌ์šฉ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ํŽธ์ง‘์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฒ”์œ„, ์ œ์•ˆ๋œ API ๋ฐ ๋‹ค์Œ ๊ณต๊ฐœ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๋„๋ก ์ด ์ œ์•ˆ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • v1 Expander์—์„œ ExpandDirection์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Expander๊ฐ€ ์•„๋ž˜์ชฝ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด Expander์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์–ด๋–ป๊ฒŒ ์ ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ ํ•ฉํ•˜์ง€ ์•Š์€์ง€์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•ฉ๋‹ˆ๋‹ค!

๋ฒ”์œ„, ์ œ์•ˆ๋œ API ๋ฐ ๋‹ค์Œ ๊ณต๊ฐœ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๋„๋ก ์ด ์ œ์•ˆ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • v1 Expander์—์„œ ExpandDirection์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Expander๊ฐ€ ์•„๋ž˜์ชฝ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด Expander์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์–ด๋–ป๊ฒŒ ์ ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ ํ•ฉํ•˜์ง€ ์•Š์€์ง€์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•ฉ๋‹ˆ๋‹ค!

์ปจํŠธ๋กค์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@mdtauk ์•„๋ž˜์ชฝ์ด ์ผ๋ฐ˜์ ์ธ ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ExpandDirection์ด ๋ณด์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ณด๋Š” Expander ๋™์ž‘์˜ ์˜ˆ๋Š” ํ›จ์”ฌ ๋” ์ž์ฃผ ์•„๋ž˜์ชฝ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. Expander์— ExpandDirection์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ v1์—์„œ ๊ผญ ํ•„์š”ํ•œ๊ฐ€์š”?

์˜ˆ, ํ™•์žฅ ๋ฐฉํ–ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ v1 ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Expander API๋Š” WPF ์ดํ›„๋กœ ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ œ์•ˆ์—๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ์†์„ฑ/์ด๋ฒคํŠธ/๋ฉ”์„œ๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๋ฒˆ์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ์ปจํŠธ๋กค๋กœ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์ž์ธ ๋ฉด์—์„œ UWP Community Toolkit์€ ํ„ฐ์น˜ ์ž‘์—…์„ ๋” ์ž˜ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ์กฐ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์•„๋ฌด๊ฒƒ๋„ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ปค๋ฎค๋‹ˆํ‹ฐ ํˆดํ‚ท์—๋„ ContentOverlay ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. V1์—์„œ๋Š” ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ™•์žฅ ๋ฐฉํ–ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ v1 ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@roblo ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”์ธ์ง€ ์ž์„ธํžˆ

์ปจํŠธ๋กค์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@mdtauk ์•„๋ž˜์ชฝ์ด ์ผ๋ฐ˜์ ์ธ ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ExpandDirection์ด ๋ณด์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ณด๋Š” Expander ๋™์ž‘์˜ ์˜ˆ๋Š” ํ›จ์”ฌ ๋” ์ž์ฃผ ์•„๋ž˜์ชฝ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. Expander์— ExpandDirection์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ v1์—์„œ ๊ผญ ํ•„์š”ํ•œ๊ฐ€์š”?

์ƒˆ๋กœ์šด ๋ชฉ๋ก ์ฝ˜ํ…์ธ ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๋กœ๋“œํ•˜๋Š” ์ฑ„ํŒ… ์•ฑ์ด ๊ทธ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ํ•„์ˆ˜ ์‚ฌํ•ญ ์™ธ์—:

  • ์ถ•์†Œ๋จ
  • ํ™•์žฅ ์ค‘
  • ํ™•์žฅ๋จ
  • IsCollapsing

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ IsEnabled

๋‹ค์Œ ํ•ต์‹ฌ์€ ํ™•์žฅํ•  ์œ„์น˜์ž…๋‹ˆ๋‹ค.

  • ํ™•์žฅ
  • ์•„๋ž˜๋กœ ํŽผ์น˜๊ธฐ
  • ์™ผ์ชฝ์œผ๋กœ ํŽผ์น˜๊ธฐ
  • ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํŽผ์น˜๊ธฐ

์ƒˆ๋กœ์šด ๋ชฉ๋ก ์ฝ˜ํ…์ธ ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๋กœ๋“œํ•˜๋Š” ์ฑ„ํŒ… ์•ฑ์ด ๊ทธ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk ์ด ์ฑ„ํŒ… ์•ฑ์˜ ์˜ˆ๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ
์†์„ฑ์— ๊ด€ํ•ด์„œ๋Š” - ์ œ์•ˆ๋œ API๋Š” WPF Expander๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ IsExpanded ๋ฐ ExpandDirection์ด ์ด๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. IsEnabled๋Š” ๋ฌด์—‡์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ? Expander๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ณผ๊ฑฐ์— ์‚ฌ์šฉํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆจ๊ฒจ์ ธ์•ผ ํ•˜๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ณด์กฐ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋Š” '์˜ต์…˜' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ํ™•์žฅ๊ธฐ๊ฐ€ ์œ„์ชฝ์œผ๋กœ ์—ด๋ฆฌ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŽธ์ง‘๊ธฐ ํ•˜๋‹จ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๋””์ž์ธ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ์žˆ์œผ๋ฉฐ ํŠนํžˆ ๊ณผ๊ฑฐ์˜ ๊ด€์Šต์ด ๋„ˆ๋ฌด ๊ฐ•ํ•  ๋•Œ ์ด๊ฒƒ์„ ์ธ์œ„์ ์œผ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํˆดํ‚ท๊ณผ WPF์—์„œ ์ด๋ฏธ ํ•ด๊ฒฐ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค์˜ V1์—์„œ๋Š” ์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋„ˆ๋ฌด ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@roblo ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”์ธ์ง€ ์ž์„ธํžˆ

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/Microsoft.Toolkit.Uwp.UI.Controls/Expander/Expander.xaml

ํ…œํ”Œ๋ฆฟ๊ณผ ์‹œ๊ฐ์  ์ƒํƒœ๋ฅผ ๋””์ž์ธํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ฃผ์˜ํ•œ๋‹ค๋ฉด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด์จŒ๋“  ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ ์ƒ๋‹นํžˆ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ์ด ์ปจํŠธ๋กค์„ ์ฒ˜์Œ๋ถ€ํ„ฐ V2 ๊ณ„ํš์— ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋งค๋ ฅ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WPF์—์„œ WinUI๋กœ ์•ฑ์„ ์ด์‹ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. WinUI๋Š” UWP์˜ ์ผ๋ถ€ ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IsEnabled๋Š” ๋ฌด์—‡์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ? Expander๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ์•ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@mdtauk ๋งž์Šต๋‹ˆ๋‹ค. IsEnabled๋„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ž…๋ ฅ ๋˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ณ€ํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท์—์„œ Windows ๋ณด์•ˆ์—๋Š” ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ์„น์…˜๊ณผ ์™ผ์ชฝ ํƒ์ƒ‰ ๋ฉ”๋‰ด์— ๋Œ€ํ•œ ํ™•์žฅ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์•ฑ์ด ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์—์„œ ํ™•์žฅ๊ธฐ๋ฅผ ๋งค์šฐ ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ์šฉํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚ด ํˆฌํ‘œ๋Š” V1์—์„œ ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@roblo

๊ณผ๊ฑฐ์— ์‚ฌ์šฉํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆจ๊ฒจ์ ธ์•ผ ํ•˜๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ณด์กฐ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋Š” '์˜ต์…˜' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ํ™•์žฅ๊ธฐ๊ฐ€ ์œ„์ชฝ์œผ๋กœ ์—ด๋ฆฌ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŽธ์ง‘๊ธฐ ํ•˜๋‹จ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์Šคํฌ๋ฆฐ์ƒท์ด๋‚˜ ํŠน์ • ์•ฑ์œผ๋กœ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์˜ต์…˜ ๋ฒ„ํŠผ์ด ๋” ๋งŽ์€ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ํŒ์—…์„ ์—ฌ๋Š” ํŽธ์ง‘๊ธฐ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ์— ์ต์ˆ™ํ•œ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ํ™•์žฅ์ด ์•„๋‹Œ ํŒ์—…/ํ”Œ๋ผ์ด์•„์›ƒ ๋™์ž‘์ธ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๊ฐ€ ์œ„์ชฝ์œผ๋กœ ํ‘ธ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ๊ณผ ์‹œ๊ฐ์  ์ƒํƒœ๋ฅผ ๋””์ž์ธํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ฃผ์˜ํ•œ๋‹ค๋ฉด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด์จŒ๋“  ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ ์ƒ๋‹นํžˆ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ์ด ์ปจํŠธ๋กค์„ ์ฒ˜์Œ๋ถ€ํ„ฐ V2 ๊ณ„ํš์— ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋งค๋ ฅ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WPF์—์„œ WinUI๋กœ ์•ฑ์„ ์ด์‹ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

WPF์—์„œ WinUI๋กœ ์•ฑ์„ ํฌํŒ…ํ•˜๋Š” ๊ฒƒ์ด ์ตœ๋Œ€ํ•œ ์›ํ™œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค! WinUI ํŒ€๊ณผ์˜ ๋…ผ์˜์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ํ™•์žฅ๋˜๋Š” V1์€ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ Expander๋ฅผ ๋” ๋นจ๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ(์ง€๊ธˆ๊นŒ์ง€ Expander์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ชจ๋‘ ํ•˜ํ–ฅ ์กฐ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—) ๊ณ„ํš๋œ V2์—์„œ ExpandDirection์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณง๋ฐ”๋กœ. (์ด ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ณต๊ฐœ ์งˆ๋ฌธ์„ ํŽธ์ง‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.) ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์šด๋‹ค์šด์ด ์•„๋‹Œ Expander์— ๋Œ€ํ•œ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค! ๐Ÿ˜„

์ปจํŠธ๋กค์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ž…๋ ฅ ๋˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ณ€ํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ œ์–ด์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค!

์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท์—์„œ Windows ๋ณด์•ˆ์—๋Š” ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ์„น์…˜๊ณผ ์™ผ์ชฝ ํƒ์ƒ‰ ๋ฉ”๋‰ด์— ๋Œ€ํ•œ ํ™•์žฅ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์•ฑ์ด ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์—์„œ ํ™•์žฅ๊ธฐ๋ฅผ ๋งค์šฐ ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ์šฉํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚ด ํˆฌํ‘œ๋Š” V1์—์„œ ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@JustABearOz ์™ผ์ชฝ ํƒ์ƒ‰ ๋ฉ”๋‰ด๋Š” ์‹ค์ œ๋กœ NavigationView ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜ƒ ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ์„น์…˜์ด ํ™•์žฅ ์‹œ๋‚˜๋ฆฌ์˜ค๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์•„๋ž˜์ชฝ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ ํ•˜ํ–ฅ์‹ Expander์— ๋Œ€ํ•œ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!

@kat-y ์ข‹์•„, ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์•ฑ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ๋˜๋Š” ์ฐฝ์˜ 2๊ฐ€์ง€ ์˜ˆ:
1: ๋น ๋ฅธ ์ž‘์—… ๋ฉ”๋‰ด๊ฐ€ ์žˆ๋Š” ์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท. ํ™•์‹คํžˆ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.
2: Windows์—์„œ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์˜ ํŒ์—… ๋‹ฌ๋ ฅ์—๋Š” ์˜์ œ/์•ฝ์†์„ ํ‘œ์‹œํ•˜๋„๋ก ํ™•์žฅ๋˜๋Š” ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

V1์— Down๋งŒ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  Up/Down ์ง€์›์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

1: ๋น ๋ฅธ ์ž‘์—… ๋ฉ”๋‰ด๊ฐ€ ์žˆ๋Š” ์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท. ํ™•์‹คํžˆ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

@JustABearOz ์ด๋Ÿฌํ•œ ์˜ˆ๋ฅผ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 1์˜ ๊ฒฝ์šฐ: ์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์€ 'ํ—ค๋”'(ํ™•์žฅ ๋ฒ„ํŠผ)์—์„œ '์•„๋ž˜๋กœ'์ด์ง€๋งŒ ์ปจํŠธ๋กค ์ž์ฒด๋Š” ํ‘œ๋ฉด์˜ ๋งจ ์•„๋ž˜์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ํ—ค๋”(๋ฐ ํ™•์žฅ๋œ ์ฝ˜ํ…์ธ ) ์œ„์ชฝ์œผ๋กœ '์ด๋™'ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ™”๋ฉด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!). ์•ฑ์˜ 'ํ•˜๋‹จ'์— ํ™•์žฅ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ?

2: Windows์—์„œ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์˜ ํŒ์—… ๋‹ฌ๋ ฅ์—๋Š” ์˜์ œ/์•ฝ์†์„ ํ‘œ์‹œํ•˜๋„๋ก ํ™•์žฅ๋˜๋Š” ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
V1์— Down๋งŒ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  Up/Down ์ง€์›์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ—ค๋”๊ฐ€ ์˜์—ญ์˜ ๋งจ ์•„๋ž˜์— ์žˆ๊ณ  ์œ„๋กœ ํ™•์žฅ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค! ์ด ๊ฒฝ์šฐ ์บ˜๋ฆฐ๋”์˜ ํ™•์žฅ๊ธฐ(๋ฐ ์ „์ฒด ํŒ์—…)๊ฐ€ ์ž‘์—… ํ‘œ์‹œ์ค„์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ํ™•์žฅ๊ธฐ๊ฐ€ ์œ„์ชฝ ํ™•์žฅ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์œ ์‚ฌํ•œ ์—ฐ๊ฒฐ ์œ„์น˜๊ฐ€ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@kat-y ๋‚ด ๋ง์€ ๊ธฐ๋ถ„ ๋‚˜์˜๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ 15๋…„ ์ „์— ์•Œ๋ ค์กŒ๋˜ ๊ฒƒ๋“ค์„ ๋‹ค์‹œ ์„ค๋ช…ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. ์™œ ์‹ค์ œ ์‚ฌ์šฉ์—์„œ ํ™•์žฅ ๋ฐฉํ–ฅ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ด๋ฅผ ์‚ฌ์–‘ ๊ฒ€ํ† ์— ์ ์šฉํ•˜๊ณ  ๊ฒฝ์˜์ง„์—๊ฒŒ ์ด๋ฅผ ๋ฐฉ์–ดํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ค๋ช…์€ ๊ฐ„๋‹จํ•˜๊ฒŒ (1) ์‚ฌ์šฉ์ž๊ฐ€ ๋””์ž์ธ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์€ Microsoft์˜ ์ฑ…์ž„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์„ ์ฐพ๋Š” ๊ฒƒ์€ ์•ฑ ๊ฐœ๋ฐœ์ž/๋””์ž์ด๋„ˆ์˜ ๋ชซ์ž…๋‹ˆ๋‹ค. (2) ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด๊ฒƒ์ด ์ „ํ˜€ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด ์˜์—ญ์˜ ๊ธฐ์กด API๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์•ฑ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด๊ฒƒ์ด ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๋ผ๋ฉด ์™œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฐฉ์–ดํ•ด์•ผ ํ•˜๋Š”์ง€ ๋” ์ž˜ ์ดํ•ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์— ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ์ด ์œ ์šฉํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ—ค๋”๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ด ์ปจํŠธ๋กค์—๋Š” ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ์žˆ์œผ๋ฉฐ C#์ด๋ผ๋ฉด WCT ๊ธฐ๋ฐ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช‡ ์‹œ๊ฐ„ ์•ˆ์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” WPF/WCT์— ์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜๊ฒฌ ์„

์ฐธ๊ณ ๋กœ @ranjeshj @ryandemopoulos @stmoy

@roblo ์†”์งํ•˜๊ฒŒ

์ด์ „์—๋Š” ๋น„ํ•˜ํ–ฅ ๋ฐฉํ–ฅ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Expanders์˜ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. WinUI ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ชจ๋“  ์˜ˆ( @justABearOz๊ฐ€ ์ง€์ ํ•œ ์บ˜๋ฆฐ๋” ํ”Œ๋ผ์ด์•„์›ƒ ํฌํ•จ)์™€ ๋‚ด๊ฐ€ Michael์—๊ฒŒ์„œ ๋ฐฐ์šด ๋ชจ๋“  ๊ฒƒ์„ Expander์˜ v1์—์„œ ExpandDirection์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฆ๊ฑฐ๋กœ WinUI ํŒ€๊ณผ์˜ ํ† ๋ก ์— ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” Expander ์ปจํŠธ๋กค ๋ชฉ๋ก์œผ๋กœ ์ œ์•ˆ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋†“์นœ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

WPF ์†Œ์Šค ์ฝ”๋“œ์™€ WCT ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ช‡ ์‹œ๊ฐ„ ์•ˆ์— WinUI์—์„œ๋„ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ContentOverlay ์†์„ฑ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ V1์—์„œ ์ œ์™ธํ•ด์•ผ ํ•˜์ง€๋งŒ ์ปจํŠธ๋กค์€ ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ์˜ WCT ๊ตฌํ˜„์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WPF:
https://github.com/dotnet/wpf/blob/master/src/Microsoft.DotNet.Wpf/src/Themes/XAML/Expander.xaml
https://github.com/dotnet/wpf/blob/master/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Expander.cs

WCT:
https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Controls/Expander

์ด ๋‘ ์†Œ์Šค๋Š” ๋ชจ๋‘ Microsoft ๋ฐ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋œ MIT์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋ฏ€๋กœ ๊ธฐ๋ณธ์ด ๋˜์–ด์•ผ ํ•˜๋ฉฐ 0์—์„œ ์‹œ์ž‘ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. Xamarin Forms๋Š” WPF->WinUI์˜ ๊ฐœ๋…๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋„ ์—†์Œ). ํƒ€์‚ฌ ์†”๋ฃจ์…˜๋„ ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ์—์„œ ํš๊ธฐ์ ์ธ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ†ต์ œ๋Š” ์‹œ๊ฐ„์˜ ์‹œํ—˜์„ ํฌ๊ฒŒ ๊ฒฌ๋Ž ์Šต๋‹ˆ๋‹ค.

@roblo ์†”์งํ•˜๊ฒŒ

์ด์ „์—๋Š” ๋น„ํ•˜ํ–ฅ ๋ฐฉํ–ฅ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Expanders์˜ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. WinUI ์ปค๋ฎค๋‹ˆํ‹ฐ( @JustABearOz๊ฐ€ ์ง€์ ํ•œ ์บ˜๋ฆฐ๋” ํ”Œ๋ผ์ด์•„์›ƒ ํฌํ•จ)์™€ ๋‚ด๊ฐ€ Michael์—๊ฒŒ์„œ ๋ฐฐ์šด ๋ชจ๋“  ์˜ˆ๋ฅผ Expander์˜ v1์—์„œ ExpandDirection์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฆ๊ฑฐ๋กœ WinUI ํŒ€๊ณผ์˜ ํ† ๋ก ์— ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„์š”, ์ œ ์š”์ ์€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ปจํŠธ๋กค์ด ์™„๋ฒฝํ•œ ์˜ˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋‚ด ์ขŒ์ ˆ๊ฐ์„ ํ‘œํ˜„ํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ˜ธ์ถœ๊ธฐ ์ œ์–ด ๋˜๋Š” ๋นต ๋ถ€์Šค๋Ÿฌ๊ธฐ ์ œ์–ด๋Š” ๋” ๋งŽ์€ ๊ฐ๋…์ด ํ•„์š”ํ•˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ์œผ๋ฉฐ WCT์—์„œ ์ œ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ถ€๊ฐ€๊ฐ€์น˜๊ฐ€ ์—†๋Š” ์„œ๋ฅ˜ ์ž‘์—…๊ณผ ํ† ๋ก ์„ ํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ WinUI ํŒ€์ด ๋‹ค์†Œ ์šฐ๋ ค๋˜๋Š” ๋‹ค๋ฅธ ์ด์ „ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. XAML ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์—”์ง€๋‹ˆ์–ด๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

WinUI ํ”„๋กœ์ ํŠธ @kat-y์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. Xaml์€ ์˜ค๋žœ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์•ฝ๊ฐ„ ๊ธฐ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WinUI๋Š” ์ž‘๋™ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ด์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ™•์žฅ๊ธฐ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์ปจํŠธ๋กค์ด๋ฏ€๋กœ WPF์—์„œ WinUI๋กœ์˜ ๊ฐ„๋‹จํ•œ ์ด๋™์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

@robloo XAML ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์—”์ง€๋‹ˆ์–ด๋งํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ท€ํ•˜์˜ ์ฃผ์žฅ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF AFAIR์—๋Š” WinUI/Fluent์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๋งŽ์€ ํฌ๋กฌ ์œ ์‚ฌ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Chevron ๋ฐ ํ„ฐ์น˜ ๋Œ€์ƒ ํฌ๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ธ€๊ผด ํฌ๊ธฐ ์กฐ์ • ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Chevron์€ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ํ…์ŠคํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

image
์ด ์˜ˆ์—๋Š” ์•ž ์ชฝ์ด ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ํ–ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๊ตฌํ˜„๊ณผ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€ ์•Š๋Š” ํ•œ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒํƒœ๋งŒ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„๊ณผ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€ ์•Š๋Š” ํ•œ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒํƒœ๋งŒ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ด์•„์›ƒ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋“œ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ์‚ฌ์šฉ์ž/๊ฐœ๋ฐœ์ž๊ฐ€ ์•ฝ๊ฐ„ ๋ฐ˜์‘์ด ์—†๊ฑฐ๋‚˜ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค(์˜ˆ: TreeView). ํ•ด๋‹น ์ง€์ ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค์„ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์† ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์งง์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊ธด ์• ๋‹ˆ๋ฉ”์ด์…˜๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ›Œ๋ฅญํ•œ ํ† ๋ก ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ

  • @mdtauk๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ํ…œํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์š”์†Œ๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋””์ž์ธ์„ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • IsEnabled๋Š” Control์—์„œ ์ƒ์†๋˜๋ฏ€๋กœ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„๊ณผ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€ ์•Š๋Š” ํ•œ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒํƒœ๋งŒ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ด์•„์›ƒ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋“œ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ์‚ฌ์šฉ์ž/๊ฐœ๋ฐœ์ž๊ฐ€ ์•ฝ๊ฐ„ ๋ฐ˜์‘์ด ์—†๊ฑฐ๋‚˜ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค(์˜ˆ: TreeView). ํ•ด๋‹น ์ง€์ ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค์„ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์† ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์งง์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊ธด ์• ๋‹ˆ๋ฉ”์ด์…˜๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ปจํŠธ๋กค์—๋Š” ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ™˜ ์†์„ฑ์ด โ€‹โ€‹์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์•„๋‹Œ ์Šคํ† ๋ฆฌ๋ณด๋“œ๊ฐ€ ๋ฆฌ์†Œ์Šค๋กœ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์„ค์ •์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋ฉด ์ „ํ™˜์„ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UIElement.Transitions?
https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.uielement.transitions?view=winrt-19041

๋˜ํ•œ IsEnabled ์†์„ฑ์—๋Š” Disabled ์ƒํƒœ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Disabled Expanded์™€ Disabled Collapsed๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด Disabled๊ฐ€ ํ•ญ์ƒ ์ ‘ํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ . ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ ์„ค์ •์œผ๋กœ ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€๋งŒ ํ˜„์žฌ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋„๋ก ์†์žก์ด๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ . ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ ์„ค์ •์œผ๋กœ ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€๋งŒ ํ˜„์žฌ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋„๋ก ์†์žก์ด๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฎ์–ด์“ธ Transition ์ปฌ๋ ‰์…˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋ ค๋Š” ๊ฒฝ์šฐ Transition ์ปฌ๋ ‰์…˜์„ null๋กœ ๋ฎ์–ด์“ฐ๋Š” Style์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ExpandTransition ๋ฐ CollapseTransition์„ ํฌํ•จํ•˜์—ฌ ์ปจํŠธ๋กค์˜ ์†์„ฑ์— ์˜ํ•ด ์„ค์ •๋œ ๋ฐฉํ–ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ „ํ™˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€๋งŒ, ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ๋งˆ ์ „ํ™˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ œ๊ฑฐํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ IsEnabled ์†์„ฑ์—๋Š” Disabled ์ƒํƒœ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Disabled Expanded์™€ Disabled Collapsed๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด Disabled๊ฐ€ ํ•ญ์ƒ ์ ‘ํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

IsExpanded ๋ฐ IsEnabled ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘˜ ์ค‘ ํ•„์š”ํ•œ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” TreeView ์ปจํŠธ๋กค์„ ๋ฏธ๋Ÿฌ๋งํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋น„ํ™œ์„ฑํ™”๋œ ํ™•์žฅ์ด ์–ด๋–ค ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™” ๋œ ์ถ•์†Œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@robloo XAML ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์—”์ง€๋‹ˆ์–ด๋งํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ท€ํ•˜์˜ ์ฃผ์žฅ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF AFAIR์—๋Š” WinUI/Fluent์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๋งŽ์€ ํฌ๋กฌ ์œ ์‚ฌ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk ์Œ, ์ œ ์ถ”์ฒœ์€ https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/expander์—์„œ "WCT ๊ตฌํ˜„์„ ๋”ฐ๋ผ์•ผ ํ•จ"์ด์—ˆ์Šต๋‹ˆ๋‹ค

@robloo XAML ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์—”์ง€๋‹ˆ์–ด๋งํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ท€ํ•˜์˜ ์ฃผ์žฅ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF AFAIR์—๋Š” WinUI/Fluent์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๋งŽ์€ ํฌ๋กฌ ์œ ์‚ฌ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk ๊ธ€์Ž„, ๋‚ด ์ถ”์ฒœ์€ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ "WCT ๊ตฌํ˜„์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค"๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค...
WPF ๋ฒ„์ „์˜ XAML์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ WinUI ๋””์ž์ธ ํŒ€์ด figma ํˆดํ‚ท์— ํฌํ•จํ•  ์‚ฌ์–‘์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ๊ทธ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ๋ณ€ํ˜•์„ ์Šน์ธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@kat-y ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด ์ œ๊ฐ€ ๊ฑฐ์น ๊ฒŒ ๋“ค๋ ธ๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ํ•„์š”ํ•œ ์ผ๋ถ€ ์˜์—ญ์—์„œ ํ”„๋กœ์ ํŠธ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์œ„์˜ ์š”์ ์„ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ณผ๊ฑฐ์— ์ด๋ฏธ ์ˆ˜ํ–‰๋œ ์ž‘์—…๊ณผ ์ง€๋‚œ 15๋…„ ๋™์•ˆ ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค๋˜ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๊ท€ํ•˜๋‚˜ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๊ฐœ์ธ์ ์œผ๋กœ ์ง€์‹œ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ฝ”๋”ฉ/์ ์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํŒ€์ด ๋” ๊ฐ„์†Œํ™”๋˜๊ณ  ๊ท ํ˜•์„ ์žฌ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋…„ ๋™์•ˆ Microsoft์—์„œ ๋ณด์•„์˜จ ์ผ๋ฐ˜์ ์ธ 'ํŒฝ์ฐฝ' ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ณ„ํš๋งŒํผ ์ข‹์€ ๊ฒƒ์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๋Šฅ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ๊ฒฐ๊ตญ ๋ฐ˜๋ณต์˜ ์†๋„๊ฐ€ ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@ranjeshj @michael-hawker ์ปค๋ฎค๋‹ˆํ‹ฐ ํˆดํ‚ท์—์„œ ์ด๋ฏธ ์ˆ˜ํ–‰๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? WinUI ํŒ€์ด ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฒˆ์ด ์ฒ˜์Œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ž‘์—…์„ ๋ณต์ œํ•˜๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋‹จํŽธํ™”๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. WCT ๋ฒ„์ „์€ ์ด๋ฏธ WPF ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์œผ๋ฉฐ ํ•„์š”ํ•œ 'ํ˜„๋Œ€์ ' ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

@ranjeshj @michael-hawker ์ปค๋ฎค๋‹ˆํ‹ฐ ํˆดํ‚ท์—์„œ ์ด๋ฏธ ์ˆ˜ํ–‰๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? WinUI ํŒ€์ด ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฒˆ์ด ์ฒ˜์Œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ž‘์—…์„ ๋ณต์ œํ•˜๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋‹จํŽธํ™”๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. WCT ๋ฒ„์ „์€ ์ด๋ฏธ WPF ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์œผ๋ฉฐ ํ•„์š”ํ•œ 'ํ˜„๋Œ€์ ' ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Community Toolkit์€ C#์— ์žˆ์œผ๋ฉฐ WinUI์—๋Š” C/C++ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ WinUI ๋””์ž์ธ ํŒ€์€ Toolkit ๋ฒ„์ „์— ๋Œ€ํ•ด AFAIK์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์—†์—ˆ์œผ๋ฏ€๋กœ Windows ๋ฐ ์•ฑ ๋””์ž์ธ ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์ฑ„ํƒํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Community Toolkit์€ C#์— ์žˆ์œผ๋ฉฐ WinUI์—๋Š” C/C++ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

C# ๋ฐ C++/WinRT๋กœ/์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Controls/Expander ์ฝ”๋“œ๋ฅผ ์ด๋ฏธ ๋ณธ Expander์˜ ๊ฒฝ์šฐ

๋˜ํ•œ WinUI ๋””์ž์ธ ํŒ€์€ Toolkit ๋ฒ„์ „์— ๋Œ€ํ•ด AFAIK์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์—†์—ˆ์œผ๋ฏ€๋กœ Windows ๋ฐ ์•ฑ ๋””์ž์ธ ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์ฑ„ํƒํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ํฌ์ธํŠธ์˜ ๊ฒฝ์šฐ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์ œ์–ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. WCT๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์ด๋ฏธ 95% ์™„์„ฑ๋„์™€ ๊ธฐ๋Šฅ 100% ์™„์„ฑ๋„๋ฅผ ๊ฐ€์ ธ๋‹ค ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒ๋‹จ์— ์ ์šฉ๋œ ๋ชจ๋“  ๋””์ž์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@roblo ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ž์„ธํžˆ

@ranjeshj ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ API๊ฐ€ WCT ๋˜๋Š” WPF์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด๋‹ค๊ณ  ์ œ์•ˆํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์ปจํŠธ๋กค์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์—์„œ๋Š” ExpandDirection์ด ์ง€์›๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์˜ค๋žœ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ Expander์˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ธฐ๋Šฅ์ด ์™œ ํ•„์š”ํ•œ์ง€ ์ •๋‹นํ™”ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ํ™•์žฅ ๋ฐฉํ–ฅ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด WCT๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. XAML ํ…œํ”Œ๋ฆฟ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๋Š” ๋™์•ˆ C# -> C++ ํฌํŠธ๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ(์ด๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ ์ˆจ๊น€์ด ๋งค์šฐ ์ž‘์Œ) ํœ ์„ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜๊ณ  ExpandDirection์„ ์ถ”๊ฐ€ํ•  ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋Š” ์šฐ๋ ค๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์šฐ๋ฆฌ์—๊ฒŒ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์  ์ œ์–ด๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ @mdtauk ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ œ์•ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ž์ธ/์Šคํƒ€์ผ๋ง ๋ณ€๊ฒฝ์„ ๋งจ ์œ„์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (1) ExpandDirection์ด V1์˜ ๋„๋งˆ์— ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ด์œ  (2) ์‹œ๊ฐ„์ด ์ œํ•œ์ ์ด๋ผ๋ฉด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ, ์ผ๋ฐ˜์ ์œผ๋กœ WinUI 3 ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ €์˜ ์ขŒ์ ˆ๊ฐ์ด ์ด ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@robloo ๋ญ”๊ฐ€ ๋„๋งˆ์—

V1์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๊ณ  V2์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ ˆ๊ฑฐ์‹œ ํ•ญ๋ชฉ์ด ์•„๋‹Œ ํ•ต์‹ฌ ๋ฐ ํ•„์ˆ˜ ์†์„ฑ ๋ฐ ๋™์ž‘๋งŒ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Microsoft๋Š” ์ด์ „ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋™๋“ฑํ•œ ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณ ๊ฐ์˜ ์š”๊ตฌ์™€ ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•  ๊ธฐ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ _์ •๋‹นํ™”_ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ UI์—์„œ ์ด๋Ÿฌํ•œ ์ œ์–ด ํŒจํ„ด์œผ๋กœ ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
Windows ์…ธ์—๋งŒ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํ™•์žฅ๊ธฐ ์ œ์–ด ํŒจํ„ด์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๊ตฌํ˜„์ด ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ธ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋””์ž์ธ ํŒ€์ด ๋‚ด๋ถ€ ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ œ์–ด ๋””์ž์ธ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

@mdtauk ์–ธ์ œ๋‚˜์ฒ˜๋Ÿผ ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์ง„์ •์œผ๋กœ Microsoft๊ฐ€ ์ทจํ•˜๊ณ  ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๋ฉด ์ด ์ฒ ํ•™์— ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ ์—์„œ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. WinUI๊ฐ€ ์„ฑ๊ณตํ•˜๋ ค๋ฉด ๊ธฐ์กด ์•ฑ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” UWP๊ฐ€ ๊ฒฐ์ฝ” ์‹œ์ž‘๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์šฐ๋ฆฌ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ UWP ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ”ผํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ WinUI๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ์„ค๋“ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ด์ „ UWP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ WPF ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. WPF ์•ฑ์ด UWP๋กœ ์ ํ”„ํ•˜์ง€ ์•Š์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ํŠนํžˆ UWP๊ฐ€ ์ฒ˜์Œ ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ ์—ฌ๋Ÿฌ ์ฃผ์š” ๊ธฐ๋Šฅ ์˜์—ญ์—์„œ ๋งค์šฐ ์—ด์•…ํ•œ ๋™๋“ฑ๋ฌผ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋กœ๋“œ๋งต์—์„œ ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์„ ๋ณด์•˜์„ ๋•Œ UWP ์•…๋ชฝ์„ ํšŒ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค(WPF์˜ ๊ธฐ๋ณธ ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ๋Š” ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ UWP์—์„œ ์ œ์™ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). 1์ˆœ์œ„ ์šฐ์„  ์ˆœ์œ„๋Š” WPF์™€ UWP ๋ชจ๋‘์—์„œ ์˜ค๋Š” ๋ถ€๋“œ๋Ÿฌ์šด ํฌํŒ… ๊ฒฝํ—˜์„ ์œ„ํ•œ ๊ฒƒ์ด์–ด์•ผ ํ•˜๋ฉฐ ์†”์งํžˆ WPF๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ์•ฑ์ด ์žˆ๊ณ  Microsoft๊ฐ€ WinUI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์Šคํฌํ†ฑ ์‚ฌ๋ก€์— ๋จผ์ € ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๊ณ  ์ ๊ทน์ ์œผ๋กœ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๊ตฌํ˜„์ด ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ธ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋””์ž์ธ ํŒ€์ด ๋‚ด๋ถ€ ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ œ์–ด ๋””์ž์ธ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ•ญ์ƒ ๋””์ž์ธ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ‰๋ณด๊ธฐ ์ œ์–ด ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์€ ExpandDirection๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋””์ž์ธ์„ ๋” ํ˜„๋Œ€ํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ ์‚ฌ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋ฃจ๊ฐ€ ๋๋‚˜๋ฉด ๋ฏธ์„ธ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์™„์ „ํžˆ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ . ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ ์„ค์ •์œผ๋กœ ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„์ง€๋งŒ ํ˜„์žฌ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋„๋ก ์†์žก์ด๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. TreeView์™€ NavigationView๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Expander๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‘˜ ๋‹ค ํ™•์žฅ/์ถ•์†Œ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ปจํŠธ๋กค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ProgressBar ๋˜๋Š” ProgressRing). ๊ทธ๋Ÿฌ๋‚˜ Expander๋Š” ์ด์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ "์žˆ์œผ๋ฉด ์ข‹์€" ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹ซ์–ดํ•ด์„œ WCT Expander ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์‚ฌ๋žŒ์„ ํฌํ•จ์‹œํ‚ค๋ ค๋ฉด ์›์น˜ ์•Š๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฎ์–ด์“ธ Transition ์ปฌ๋ ‰์…˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„๋ ค๋Š” ๊ฒฝ์šฐ Transition ์ปฌ๋ ‰์…˜์„ null๋กœ ๋ฎ์–ด์“ฐ๋Š” Style์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๊ทธ๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™”/ํ™œ์„ฑํ™”ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์Šคํƒ€์ผ์„ ์ œ๊ณตํ•  ๋•Œ AccentColorButtonStyle ๋˜๋Š” RevealButtonStyle๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฌ๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ExpandTransition ๋ฐ CollapseTransition์„ ํฌํ•จํ•˜์—ฌ ์ปจํŠธ๋กค์˜ ์†์„ฑ์— ์˜ํ•ด ์„ค์ •๋œ ๋ฐฉํ–ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ „ํ™˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๊ฐ€ ์ •๋ง ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๊ทธ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€๋งŒ, ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ๋งˆ ์ „ํ™˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ œ๊ฑฐํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋„ ๊ทธ๊ฒŒ ๊ฑฑ์ •์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ๋งˆ ์ „ํ™˜ ์—†์ด ExpandTransition ๋ฐ CollapseTransition API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "ExpendTransitionEnabled" ๋ฐ "CollapseTransitionEnabled"๋งŒ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

@robloo WinUI 3 ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ๋ถˆ๋งŒ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ €์—๊ฒŒ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ์„ธ์š”(์ œ Twitter์™€ ์ง์žฅ ์ด๋ฉ”์ผ์€ ์ œ GitHub ํ”„๋กœํ•„์— ์žˆ์Šต๋‹ˆ๋‹ค). ๊ท€ํ•˜์˜ ํ˜„์žฌ ๋ถˆ๋งŒ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ์•Œ๊ณ  ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ, ์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ๊ฐ ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ/๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ์ฃผ์ œ์— ๋Œ€ํ•ด ์‹œ์ž‘ํ•˜๊ธฐ์— ์ข‹์€ ์‚ฌ๋žŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€๋‚œ 1๋…„ ๋™์•ˆ ์ƒ๋‹นํ•œ ์ˆ˜์˜ ํฌ์ปค์Šค ๊ทธ๋ฃน์„ ์šด์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ, ๊ธฐ๋Šฅ ํŒจ๋ฆฌํ‹ฐ ๋“ฑ์— ๋Œ€ํ•ด ๋‚˜์—ดํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต์ด ๋งค์šฐ ๋นก๋นกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์žฅ๋‹ดํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๊ณ ๊ฐ ๋ฐ/๋˜๋Š” WinUI ๊ธฐ์—ฌ์ž์ด๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” ์ตœ์†Œํ•œ ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ์šฐ๋ฆฌ ํŒ€์—์„œ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ ค๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๊ฒฝ์šฐ๋Š” ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์— ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฑ„ํŒ…ํ•˜์ž? ๐Ÿ˜„

@mdtauk ์„ค๋ช…์„ ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ž˜ ์ง€๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ ํŒ€์—๋Š” ๋ถ„๋ช…ํžˆ ๋งŽ์€ ๊ฒƒ์ด ์žˆ์œผ๋ฉฐ ํŒ€์€ ๋ชจ๋“  ์˜์—ญ์—์„œ ๊ฐ€์žฅ ์˜๋ฏธ ์žˆ๊ณ  ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ์ง„์ „์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ์•ผ์œ„๊ณ  ํšจ๊ณผ์ ์ธ ๋ฐ ์ „๋…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ง„ํ–‰๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์˜์—ญ ์ค‘์—์„œ ์ƒˆ๋กœ์šด ์ œ์–ด/๊ธฐ๋Šฅ์— ๊ณ„์† ํˆฌ์žํ•˜๋ ค๋ฉด @kat-y์™€ ๊ฐ™์€ ํŒ€์›์ด _๋งค์šฐ_ ๋‚ ์นด๋กœ์šด ์š”๊ตฌ ์‚ฌํ•ญ ์‚ฌ์–‘์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋น„์šฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์ด ๊ณ„์† ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” API์ž…๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ๊ตฌ๋ฌธ ๋ถ„์„ํ–ˆ์ง€๋งŒ @kat-y, ํŠนํžˆ ์ƒˆ ํŒ€ ๊ตฌ์„ฑ์›์œผ๋กœ์„œ ์š”์ฒญ๋œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์‹ค์ œ ์•ฑ์˜ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์™„๋ฒฝํ•˜๊ฒŒ ๋ช…ํ™•ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์Šต๋‹ˆ๋‹ค( ๋ช…์‹œ๋œ ์ด์œ ์™€ ๊ฐœ๋ฐœ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์—ฃ์ง€ ์ผ€์ด์Šค ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์š”๊ตฌ๋˜๋Š” ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜๋„๋ก ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๊ฒ€์ฆ ํŒŒํŠธ๋„ˆ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ด๋ง์˜ ์ค€์ˆ˜๋Š” ๊ฒ€์ฆ ํŒŒํŠธ๋„ˆ๊ฐ€ ๋น„๊ณต๊ฐœ์ธ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฐฉ์†ก๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์— ๊ณต๊ฐœ์ ์œผ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ @kat-y์— ์ง์ ‘ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ) ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ชจ๋“  WinUI 2+ ์ปจํŠธ๋กค ๋ฆด๋ฆฌ์Šค์—์„œ ์„ ๋ก€์˜€์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๋‚˜์š”? ์ด ์Šค๋ ˆ๋“œ๋ฅผ @kat-y ๋ฐ ํ˜„์žฌ์˜ Expander ์ฃผ์ œ๋กœ ๋‹ค์‹œ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์ œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด ๋” ์žˆ๊ฑฐ๋‚˜ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์€ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์œผ๋ฉด ์ง์ ‘ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”. ์ด ์Šค๋ ˆ๋“œ์™€ WinUI์— ์Ÿ์€ ๋ชจ๋“  ์ž‘์—…, ์—ด์ • ๋ฐ ์—๋„ˆ์ง€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ˜„

@mdtauk ์–ธ์ œ๋‚˜์ฒ˜๋Ÿผ ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์ง„์ •์œผ๋กœ Microsoft๊ฐ€ ์ทจํ•˜๊ณ  ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๋ฉด ์ด ์ฒ ํ•™์— ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ ์—์„œ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋™์˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ๋ ˆํฌ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ผœ๋ณด๋ฉด์„œ ํŒ€์ด ์ด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

(๋ช…์‹œ๋œ ์ด์œ ์™€ ๊ฐœ๋ฐœ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์—์ง€ ์ผ€์ด์Šค ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜ํ–‰๋˜๋„๋ก ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๊ฒ€์ฆ ํŒŒํŠธ๋„ˆ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.) ์ด๋Ÿฌํ•œ ์—ด๋ง์˜ ์ค€์ˆ˜๋Š” ๊ฒ€์ฆ ํŒŒํŠธ๋„ˆ๊ฐ€ ๋น„๊ณต๊ฐœ์ธ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฐฉ์†ก๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์— ๊ณต๊ฐœ์ ์œผ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ @kat-y์— ์ง์ ‘ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ) ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ชจ๋“  WinUI 2+ ์ปจํŠธ๋กค ๋ฆด๋ฆฌ์Šค์—์„œ ์„ ๋ก€์˜€์Šต๋‹ˆ๋‹ค.

Microsoft์˜ ์ž์ฒด ์•ฑ๊ณผ Shell์„ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ชฉ์ ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๋‚ด๋ถ€ ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์‹์„ ์ด๋Œ์–ด๋‚ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. " ์ž์‹ ์˜ ๊ฒƒ์„ ๋กค๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." - ๋ฌผ๋ก  Windows์šฉ ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” Netflix, Facebook ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฑฐ๋Œ€ ๊ธฐ์—…์€ ์ปจํŠธ๋กค ๋ฐ ๊ธฐํƒ€ ๋น„ํŠธ๋„ ์š”๊ตฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUI๋Š” WPF, MFC, CommonControls, WinForms ๋“ฑ๊ณผ ๊ฐ™์€ ํŒจ๋ฆฌํ‹ฐ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ํ˜„๋Œ€์ ์ธ ๋“ฑ๊ฐ€๋ฌผ ์—†์ด ์ด๋Ÿฌํ•œ ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค์„ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ง„์ง€ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•ด์•ผ ํ•จ)

Breadcrumb Bars ๋ฐ Expanders๊ฐ€ ์ œ์•ˆ๋˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ด๊ฒƒ์ด IMO์—์„œ ์ผ์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ฑ ๋””์ž์ด๋„ˆ๊ฐ€ ๋ชฉ์ ์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ UI์™€ UX๋ฅผ ์žฌํ‰๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์ปจํŠธ๋กค ๋˜๋Š” API ์ถ”๊ฐ€๋Š” ์ด์ƒ์ ์ธ ํ™˜๊ฒฝ์—์„œ ํ‰๊ฐ€๋˜๊ณ  "์ •๋‹นํ™”"๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - ์ด ๊ฒฝ์šฐ์—๋Š” ๋ช…๋ฐฑํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํฌํ•จ ์‚ฌ๋ก€๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด ํŒจํ„ด๊ณผ ์ด๋Ÿฌํ•œ API๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ๋ฅผ ๊ณ„์† ์ œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ •๋ณด: ItemsRepeater๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ElementAnimator ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? StartShowAnimation() ๋ฐ StartHideAnimation() ๊ฐ€ ์žˆ๋Š” ElementAnimator API๋Š” ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค(ํ™•์žฅ์—๋Š” "ํ‘œ์‹œ", ์ถ•์†Œ์—๋Š” "์ˆจ๊ธฐ๊ธฐ" ์‚ฌ์šฉ). ๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค์— ElementAnimator ์†์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์†์„ฑ์„ null๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ElementAnimator์— ํ‘œ์‹œ ๋˜๋Š” ์ˆจ๊ธฐ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜๋งŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ElementAnimator API์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฉฐ https://github.com/microsoft/microsoft-ui-xaml/issues/166 ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์•„์ง ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๊ธฐ๋Šฅ์  ๊ฒฉ์ฐจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ž‘์—… ํ•ญ๋ชฉ(Expander ์ปจํŠธ๋กค ๋ฐ ElementAnimator๊ฐ€ Expander ์ปจํŠธ๋กค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘๋™)์„ ๋™๊ธฐํ™”ํ•˜๊ณ  ํ•จ๊ป˜ ์—”์ง€๋‹ˆ์–ด๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ  ElementAnimator ์•„์ด๋””์–ด๋Š” ์ •๋ง ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ œ ๊ฑฑ์ •์€ ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋ง๋œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ExpanderControl์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • ElementAnimator๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ํ…Œ๋งˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ElementAnimator๋Š” ํ™•์žฅ๊ธฐ ์ปจํŠธ๋กค์ด ์‹ค์ œ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋‹ค์†Œ ์–ด์ƒ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

ElementAnimator๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ์ž์‹ ๋˜๋Š” ํฌํ•จ๋œ ์š”์†Œ์˜ ์˜คํ”„์…‹์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

ํ™•์žฅ๊ธฐ๋กœ ํ‘œ์‹œ๋˜๋Š” ํŒจ๋„ ๋‚ด์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ณผ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ป๊ฒŒ๋“  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ™•์žฅ ํŒจ๋„์ด ์š”์†Œ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Expander๋Š” ์ž์‹ ์š”์†Œ ์ „ํ™˜์„ ์ง์ ‘ ์ œ์–ดํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์—ฌ๊ธฐ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๊ณ ๊ฐ์—๊ฒŒ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์ˆ˜์ค€์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ต์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํƒ์ƒ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์ด ํ™•์žฅ/์ถ•์†Œ๋  ๋•Œ TreeView ์ปจํŠธ๋กค์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋ผ๋Š” ์š”์ฒญ์„ ์ด๋ฏธ ๋ณด์•˜์Šต๋‹ˆ๋‹ค(https://github.com/microsoft/microsoft-ui-xaml/issues/208). Expander์™€ TreeView ์ปจํŠธ๋กค ๋ชจ๋‘์— ๋Œ€ํ•ด ๋ฉ‹์ง€๊ฒŒ ๋ณด์ด๋„๋ก ํ•œ ์„ธํŠธ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ปจํŠธ๋กค ๊ฐ„์— ์ผ๊ด€์„ฑ ์ˆ˜์ค€์ด ์ž๋™์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ๊ฐ์  ์นœ์ˆ™ํ•จ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋งค๋ ฅ์ ์ธ ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” TreeView์™€ ๊ณ„์ธต์  NavigationView๊ฐ€ ์ปจํŠธ๋กค์ด ์ค€๋น„๋˜๋ฉด Expander ์ปจํŠธ๋กค๋กœ ์ „ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ํ˜„์žฌ ๋‘ ์ปจํŠธ๋กค์€ ExpanderControl๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต์œ  ์• ๋‹ˆ๋ฉ”์ด์…˜์€ TreeView์— ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ElementAnimator์˜ ๋ฌธ์ œ(๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐฉ๋ฒ•)๋Š” ์ƒˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Expander์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ด๋ฏธ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์žฅ๊ธฐ๋กœ ํ‘œ์‹œ๋˜๋Š” ํŒจ๋„ ๋‚ด์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ณผ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ป๊ฒŒ๋“  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ™•์žฅ ํŒจ๋„์ด ์š”์†Œ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ElementAnimator์˜ ์ฃผ์š” ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋Š” ํŒจ๋„๊ณผ ์ปฌ๋ ‰์…˜(์˜ˆ: ItemsRepeater)์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. Expander์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์ง€๋งŒ expander๋Š” ํ•ญ๋ชฉ ๋ชจ์Œ์„ ๋ Œ๋”๋งํ•˜๋Š” ํŒจ๋„์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์—ฌ์œ ๊ฐ€์žˆ๋Š” ์ƒ์œ„ ํŒจ๋„์˜ ํฌ๊ธฐ ์กฐ์ •. ๊ทธ๋Ÿฌ๋ฉด ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์Šฌ๋ผ์ด๋“œ ๋ฐ ํŽ˜์ด๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fluent Design ๋ชจ์…˜ ํŒ€์—์„œ ๊ฒฐ์ •ํ•œ ์ ์ ˆํ•œ ์™„ํ™”๋กœ ์ผ๋ฐ˜ํ™”๋œ OS ์ „์ฒด ์ „ํ™˜์ด ๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ @stmoy์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ์—ฌํ•˜๊ณ  ์šฐ๋ฆฌ ํŒ€์˜ ์•ฝ์†์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•œ @SavoySchuler ์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์™œ ExpandDirection์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์•ฑ์˜ ์˜ˆ๋ฅผ ํŠน๋ณ„ํžˆ ์ฐพ๊ณ  ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค! ์‚ฌ๋ณด์ด์˜ ๋ง์„ ๋˜ํ’€์ดํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ €์—๊ฒŒ ์ง์ ‘ ์—ฐ๋ฝํ•˜์„ธ์š”(ํ”„๋ผ์ด๋ฒ„์‹œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŠธ์œ„ํ„ฐ DM).

@robloo ์‚ฌ๊ณผ

๊ทธ๋Ÿฐ ์ ์—์„œ ์ €๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์ตœ์‹  ๋Œ“๊ธ€์„ ์ฝ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!

์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ด€๋ จ ๋Œ“๊ธ€์„ ์ฝ์–ด๋ณด๋‹ˆ ์ž‘์—…๋Ÿ‰์ด ๋Š˜์–ด๋‚˜๋Š” ์ˆœ์„œ๋Œ€๋กœ 3๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„ธํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ - ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์„ธํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ข‹์•„ ๋ณด์ผ ๋•Œ @chingucoding ์ด ๊ฐœ๋ฐœ์ž๋ฅผ

@mdtauk ๋Š” ExpandTransition ๋ฐ CollapseTransition์„ ํฌํ•จํ•˜์—ฌ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค

์ปจํŠธ๋กค์˜ ์†์„ฑ์— ์˜ํ•ด ์„ค์ •๋œ ๋ฐฉํ–ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ „ํ™˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ElementAnimator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ž‘์€ ๋ฒ”์œ„์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „ํ™˜์„ ์„ค์ •ํ•  ๋•Œ ์™„์ „ํ•œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์—ฌ์œ ๊ฐ€์žˆ๋Š” ์ƒ์œ„ ํŒจ๋„์˜ ํฌ๊ธฐ ์กฐ์ •. ๊ทธ๋Ÿฌ๋ฉด ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์Šฌ๋ผ์ด๋“œ ๋ฐ ํŽ˜์ด๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์˜ ์ผ๋ถ€๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ์‹œ๊ฐ์  ๐Ÿ˜„ ์—†์ด๋Š” ์‹œ๊ฐํ™”ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. "์ƒ์œ„ ํŒจ๋„์˜ ํฌ๊ธฐ ์กฐ์ •"์€ ํ—ค๋”์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? "ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์˜ ์Šฌ๋ผ์ด๋“œ ๋ฐ ํŽ˜์ด๋“œ"๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@Felix-Dev๋Š” ElementAnimator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

StartShowAnimation() ๋ฐ StartHideAnimation()์ด ์žˆ๋Š” ElementAnimator API๋Š” ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค("ํ‘œ์‹œ"๋Š” ํ™•์žฅ์— ์‚ฌ์šฉ, "์ˆจ๊น€"์€ ์ถ•์†Œ์— ์‚ฌ์šฉ). ๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค์— ElementAnimator ์†์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์†์„ฑ์„ null๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ElementAnimator์— ํ‘œ์‹œ ๋˜๋Š” ์ˆจ๊ธฐ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜๋งŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@chingucoding ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ์กด ํ…Œ๋งˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž ์ง€์ • ElementAnimator๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ElementAnimator๋Š” ํ™•์žฅ๊ธฐ ์ปจํŠธ๋กค์ด ์‹ค์ œ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋‹ค์†Œ ์–ด์ƒ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

ElementAnimator์˜ ์ฃผ์š” ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋Š” ํŒจ๋„ ๋ฐ ์ปฌ๋ ‰์…˜(์˜ˆ: ItemsRepeater)์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Expander์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์ง€๋งŒ expander๋Š” ํ•ญ๋ชฉ ๋ชจ์Œ์„ ๋ Œ๋”๋งํ•˜๋Š” ํŒจ๋„์ด ์•„๋‹™๋‹ˆ๋‹ค.

TreeView ๋ฐ ๊ณ„์ธต์  NavigationView๋Š” ์ปจํŠธ๋กค์ด ์ค€๋น„๋˜๋ฉด Expander ์ปจํŠธ๋กค๋กœ ์ „ํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ํ˜„์žฌ ๋‘ ์ปจํŠธ๋กค์€ ExpanderControl๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต์œ  ์• ๋‹ˆ๋ฉ”์ด์…˜์€ TreeView์— ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

TreeView์™€ ๊ณ„์ธต์  NavigationView๊ฐ€ Expander์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Expander๊ฐ€ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ชจ๋“  ์ฝ˜ํ…์ธ (ํ…์ŠคํŠธ/๋ฒ„ํŠผ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ)๋ฅผ ํ‘ธ์‹œํ•  ๋•Œ์™€ Expander๊ฐ€ ์„œ๋กœ '์•„์ฝ”๋””์–ธ'๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ž ์žฌ์ ์œผ๋กœ ์„œ๋กœ์˜ ํ™•์žฅ์— ๋”ฐ๋ผ ๋‹ซ๊ฑฐ๋‚˜ ์—ด ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ElementAnimator๊ฐ€ ํŒจ๋„/์ปฌ๋ ‰์…˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์šฉ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ Expander ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๊ณผ๋„ํ•ฉ๋‹ˆ๊นŒ?

@mdtauk ๋Š” ExpandTransition ๋ฐ CollapseTransition์„ ํฌํ•จํ•˜์—ฌ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค

์ปจํŠธ๋กค์˜ ์†์„ฑ์— ์˜ํ•ด ์„ค์ •๋œ ๋ฐฉํ–ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ „ํ™˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ElementAnimator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ž‘์€ ๋ฒ”์œ„์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „ํ™˜์„ ์„ค์ •ํ•  ๋•Œ ์™„์ „ํ•œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์—ฌ์œ ๊ฐ€์žˆ๋Š” ์ƒ์œ„ ํŒจ๋„์˜ ํฌ๊ธฐ ์กฐ์ •. ๊ทธ๋Ÿฌ๋ฉด ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์Šฌ๋ผ์ด๋“œ ๋ฐ ํŽ˜์ด๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์˜ ์ผ๋ถ€๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ์‹œ๊ฐ์  ๐Ÿ˜„ ์—†์ด๋Š” ์‹œ๊ฐํ™”ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. "์ƒ์œ„ ํŒจ๋„์˜ ํฌ๊ธฐ ์กฐ์ •"์€ ํ—ค๋”์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? "ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์˜ ์Šฌ๋ผ์ด๋“œ ๋ฐ ํŽ˜์ด๋“œ"๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

expander_motion

๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์€ ๋ชฉ์—… ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์‹ค์ œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํƒ€์ด๋ฐ์€ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค. ๋‹จ์ง€ ์„ค๋ช…์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ„ํ™์ƒ‰ ์œค๊ณฝ์„ ์€ ํ™•์žฅ๊ธฐ ํ—ค๋”์ด๊ณ  ๋…น์ƒ‰ ํ…Œ๋‘๋ฆฌ๋Š” ํ™•์žฅ๊ธฐ ์ฐฝ/์ฝ˜ํ…์ธ  ๋“ฑ์ž…๋‹ˆ๋‹ค.

TreeView์™€ ๊ณ„์ธต์  NavigationView๊ฐ€ Expander์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Expander๊ฐ€ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ชจ๋“  ์ฝ˜ํ…์ธ (ํ…์ŠคํŠธ/๋ฒ„ํŠผ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ)๋ฅผ ํ‘ธ์‹œํ•  ๋•Œ์™€ Expander๊ฐ€ ์„œ๋กœ '์•„์ฝ”๋””์–ธ'๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ž ์žฌ์ ์œผ๋กœ ์„œ๋กœ์˜ ํ™•์žฅ์— ๋”ฐ๋ผ ๋‹ซ๊ฑฐ๋‚˜ ์—ด ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” Expander๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? TreeView ๋ฐ Hierarchical NavigationView๋Š” ํ™•์žฅ/์ถ•์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์˜์—ญ์—์„œ ๋ณด๋‹ค ํ†ตํ•ฉ๋œ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ™•์žฅ๊ธฐ ์ปจํŠธ๋กค์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ํ™•์‹คํžˆ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด TreeView๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด ๊ณ„์ธต์  NavigationView๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์˜ ํšŒ์ „์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ElementAnimator๊ฐ€ ํŒจ๋„/์ปฌ๋ ‰์…˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์šฉ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ Expander ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๊ณผ๋„ํ•ฉ๋‹ˆ๊นŒ?

ElementAnimator(์ ์–ด๋„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ๋Š”)๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ์ปจํŠธ๋กค ์ค‘ ํ•˜๋‚˜๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€ํ˜• ํŒจ๋„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ItemsRepeater์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Expander์—๋Š” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹ˆ๋ผ ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‚ด๊ฐ€ ์•Œ์•„์ฐจ๋ฆฐ ๋‹ค๋ฅธ ์ ์€ ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ๋ฐฐ์น˜๋  ์œ„์น˜(์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์œ„์ชฝ/์•„๋ž˜์ชฝ)๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ •์˜ ํฌ์ธํŠธ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์„๊นŒ์š”? NavigationView๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ํ•˜๊ณ  TreeView๋Š” ์™ผ์ชฝ์— ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๊ธฐ์กด ํ™•์žฅ๊ธฐ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋˜๋ฉฐ ์„ค์ • ์•ฑ์˜ ์ผ๋ถ€ ์˜์—ญ์—์„œ๋Š” ์™ผ์ชฝ์— ๋ฐฐ์น˜ํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ์•Œ๋ฆผ์€ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•Œ์•„์ฐจ๋ฆฐ ๋‹ค๋ฅธ ์ ์€ ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์ด ๋ฐฐ์น˜๋  ์œ„์น˜(์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์œ„์ชฝ/์•„๋ž˜์ชฝ)๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ •์˜ ํฌ์ธํŠธ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์„๊นŒ์š”? NavigationView๋Š” ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ํ•˜๊ณ  TreeView๋Š” ์™ผ์ชฝ์— ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๊ธฐ์กด ํ™•์žฅ๊ธฐ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋˜๋ฉฐ ์„ค์ • ์•ฑ์˜ ์ผ๋ถ€ ์˜์—ญ์—์„œ๋Š” ์™ผ์ชฝ์— ๋ฐฐ์น˜ํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ์•Œ๋ฆผ์€ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

TopLeft, TopRight, BottomCentered(๋ฐ ๋” ๋งŽ์€ (Left, Right, ...)) ๋ฐ ์ถ”๊ฐ€ ExpandGlyphPlacementOffset ์†์„ฑ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ExpandGlyphPlacementMode ์™€ ๊ฐ™์€ ๊ฐ’์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์œ„์น˜(๋ฐฐ์น˜ ๋ชจ๋“œ๋กœ ์„ค์ •).

๊ทธ ์™ธ์—๋„ @mdtauk๊ฐ€ ์ด๋ฏธ ์•Œ์•„์ฐจ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ํ™•์žฅ/์ถ•์†Œ ๊ธ€๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” API(์ผ๋ถ€ ์ปจํŠธ๋กค์€ > ์‚ฌ์šฉ, ๋‹ค๋ฅธ ์ปจํŠธ๋กค์€ ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— v ) ๋ฐ ๊ธ€๋ฆฌํ”„.

TopLeft, TopRight, BottomCentered(๋ฐ ๋” ๋งŽ์€ (Left, Right, ...)) ๊ฐ’์ด ์žˆ๋Š” ExpandGlyphPlacementMode์™€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋ณธ ์œ„์น˜(๋ฐฐ์น˜ ๋ชจ๋“œ๋กœ ์„ค์ •)๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ExpandGlyphPlacementOffset ์†์„ฑ์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

TopLeft, TopRight ... ์—ฌ๊ธฐ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์‹œ์ž‘" ๋ฐ "๋"๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์—ฌ๊ธฐ์— ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฐ€๋กœ ๋ ˆ์ด์•„์›ƒ์—์„œ ์‹œ์ž‘์€ ์™ผ์ชฝ(RTL ์–ธ์–ด์˜ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ)์— ์žˆ๊ณ  ์„ธ๋กœ ์—ด๊ธฐ ๋ชจ๋“œ์—์„œ๋Š” ์œ„์ชฝ์ด ๋ฉ๋‹ˆ๋‹ค. "๋"์€ ๊ทธ์— ๋”ฐ๋ผ ์ •์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TopLeft์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ... ์ด์ ์€ ๊ฑฐ์˜ ์—†์ง€๋งŒ ๋ณต์žก์„ฑ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(TeachingTip ์ฐธ์กฐ). ExpanderControl์ด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์—ด๋ฆฌ๋ฉด TopLeft์™€ TopRight๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‹จ ์ค‘์•™๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ๋งŽ์€ ๊ณต๊ฐ„์—์„œ ๋‹ค์†Œ ์–ด์ƒ‰ํ•ด ๋ณด์ด๊ณ  ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ @ mdtauk(๋ฐ›์€ ํŽธ์ง€ํ•จ์„ ์ŠคํŒธํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์–ธ๊ธ‰ ๋‚˜๋ˆ„๊ธฐ)์—์„œ ์ด๋ฏธ ํ™•์ธํ–ˆ๋“ฏ์ด ํ™•์žฅ/์ถ•์†Œ ๊ธ€๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” API(์ผ๋ถ€ ์ปจํŠธ๋กค์€ >๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์ปจํŠธ๋กค์€ ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— v๋ฅผ ์‚ฌ์šฉ) ๊ธ€๋ฆฌํ”„.

๋ฌธ์ œ๋Š” ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ณ„์ธต์  NavigationView๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ ‘ํžŒ ๊ฒฝ์šฐ v ๋˜๋Š” >๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๋ฐ ์ถ•์†Œ ๊ธ€๋ฆฌํ”„๋ฅผ ๊ต์ฒดํ•˜๋Š” API๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ ‘ํžŒ ๊ธ€๋ฆฌํ”„ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” API๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋Š” ๊ฝค ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. List View์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ on/off๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋”์™€ ๊ธ€๋ฆฌํ”„๋„ RTL ์–ธ์–ด์˜ ์ธก๋ฉด์„ ์ž๋™์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ธ€๋ฆฌํ”„ ์‚ฌ์šฉ์ž ์ •์˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์ด ์žˆ๋Š” ์‹๋ณ„๋œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ž‘๋™ํ•˜๋Š” ์Šคํƒ€์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  CheckBox ๋ฐ ๊ธฐํƒ€ ์ปจํŠธ๋กค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ ๋””์ž์ธ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์€ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋‹จ์ˆœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ปจํŠธ๋กค์„ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟํ™”ํ•˜๋Š” ๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋ถ€์ •์ ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด๋ฉฐ ์‹ค์ œ๋กœ๋Š” ์ปจํŠธ๋กค์ด ๋œ ๋ณด์ด๋Š” ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‚ด๊ฐ€ ๋งŽ์ด ๋“ฃ๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด๋„ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๊ฐ€๋ฒผ์šด ์Šคํƒ€์ผ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ ํ•ฉ๋ฆฌ์ ์ธ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TopLeft, TopRight ... ์—ฌ๊ธฐ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์‹œ์ž‘" ๋ฐ "๋"๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์—ฌ๊ธฐ์— ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฐ€๋กœ ๋ ˆ์ด์•„์›ƒ์—์„œ ์‹œ์ž‘์€ ์™ผ์ชฝ(RTL ์–ธ์–ด์˜ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ)์— ์žˆ๊ณ  ์„ธ๋กœ ์—ด๊ธฐ ๋ชจ๋“œ์—์„œ๋Š” ์œ„์ชฝ์ด ๋ฉ๋‹ˆ๋‹ค. "๋"์€ ๊ทธ์— ๋”ฐ๋ผ ์ •์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TopLeft์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ... ์ด์ ์€ ๊ฑฐ์˜ ์—†์ง€๋งŒ ๋ณต์žก์„ฑ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(TeachingTip ์ฐธ์กฐ).

@chingucoding NavigationView๋Š” ์„ธ๋กœ ์—ด๊ธฐ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(NavigationViewItem์ด ์„ธ๋กœ๋กœ ํ™•์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—), ๋งž์ฃ ? ๊ทธ๋Ÿฌ๋ฉด ํ—ค๋”์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์— ๊ธ€๋ฆฌํ”„๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? "์‹œ์ž‘"์ด ๋งจ ์œ„์— ์žˆ๊ณ  "๋"์ด ์•„๋งˆ๋„ ํ—ค๋”์˜ ๋งจ ์•„๋ž˜์— ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธ€๋ฆฌํ”„๋ฅผ ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ExpandGlyphPlacementOffset ์™€ ๊ฐ™์€ API๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜๋‹จ ์ค‘์•™๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ๋งŽ์€ ๊ณต๊ฐ„์—์„œ ๋‹ค์†Œ ์–ด์ƒ‰ํ•ด ๋ณด์ด๊ณ  ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์›น, ์•ฑ ๋“ฑ์—์„œ ๊ทธ ์˜ˆ๋ฅผ ๋ณด์•˜์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๊ทธ ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐํ•ด ๋‚ธ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์˜ˆ์ œ๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ์ง์ ‘ ์ง€์›ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ๋˜๋Š” ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์— ๋งก๊ธธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ธ€๋ฆฌํ”„ ์‚ฌ์šฉ์ž ์ •์˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์ด ์žˆ๋Š” ์‹๋ณ„๋œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ž‘๋™ํ•˜๋Š” ์Šคํƒ€์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  CheckBox ๋ฐ ๊ธฐํƒ€ ์ปจํŠธ๋กค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ ๋””์ž์ธ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์€ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋‹จ์ˆœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ปจํŠธ๋กค์„ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟํ™”ํ•˜๋Š” ๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋ถ€์ •์ ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด๋ฉฐ ์‹ค์ œ๋กœ๋Š” ์ปจํŠธ๋กค์ด ๋œ ๋ณด์ด๋Š” ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

@robloo ์žฌํ…œํ”Œ๋ฆฟ์— ๋ฐ˜๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๊ฒŒ์‹œ๋œ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— ">"๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋Š” ์ˆ˜์ง์œผ๋กœ ํ™•์žฅํ•  ๋•Œ ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— "v"๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธ€๋ฆฌํ”„์˜ ์œ„์น˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Expander ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ธ€๋ฆฌํ”„๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์€ ํ•ญ์ƒ ์ ˆ์ถฉ์ ์„ ์ˆ˜๋ฐ˜ํ•˜๋ฉฐ ์ฃผ๋กœ WinUI์˜ ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ํ–ฅํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ž๋™์œผ๋กœ ์ด์ ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹ , ๊ทธ ๋ถ€๋‹ด์€ ์ด์ œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ์ง€์ • ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  Expander ์ปจํŠธ๋กค์„ ํ†ตํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธ€๋ฆฌํ”„์˜ ๊ฒฝ์šฐ( Fluent UI ์›น ์‚ฌ์ดํŠธ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ)๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
fluent-ui-website-expand

๊ธ€๋ฆฌํ”„ ๊ธฐํ˜ธ ์‚ฌ์šฉ์ž ์ •์˜๋Š” ๋ชจ๋“  ๋‚ด์žฅ ๊ธ€๋ฆฌํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๊ณ ๊ฐ์ด ๋” ์›ํ•˜๋Š” ๊ฒƒ - ๊ธฐํ˜ธ์— ๋”ฐ๋ผ ๊ธ€๋ฆฌํ”„๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๊ธ€๋ฆฌํ”„์— ๋Œ€ํ•œ ๋‚ด์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜(NavigationView์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ)์„ ๊ฐ–๋Š” ๊ธฐ๋Šฅ. ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ „์ž๊ฐ€ ๋” ์ค‘์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ๋’ท๋ฐ›์นจํ•  ํ•˜๋“œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ Expander ์ปจํŠธ๋กค์€ Telerik Expander ์ปจํŠธ๋กค ๋กœ ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜ํ•œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ง€์ • API(์˜ˆ: ๊ธ€๋ฆฌ์˜ค ๋˜๋Š” ๊ธ€๋ฆฌํ”„ ๊ธฐํ˜ธ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ)๋ฅผ ๋…ธ์ถœํ•˜๋ฉฐ ์˜๊ฐ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ExpandedGlyph
์ ‘ํžŒ ๊ธ€๋ฆฌํ”„
๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋กœ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ

GlyphPlacement.Start .End .Above .Below
์•„๋งˆ๋„?

๋„ˆ๋น„๋ฅผ ์ฑ„์šฐ๋Š” ํ—ค๋”๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜ํ…์ธ  ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Glyph์™€ ํ…์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ ์„ผํ„ฐ์˜ ๊ฒฝ์šฐ ํ™•์žฅ๊ธฐ์™€ ๊ฐ™์€ ์ค„์— ๋ชจ๋‘๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ์š”? ํ™•์žฅ ํŒจ๋„์„ ํ™•์žฅ ํ—ค๋”์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@chingucoding NavigationView๋Š” ์„ธ๋กœ ์—ด๊ธฐ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(NavigationViewItem์ด ์„ธ๋กœ๋กœ ํ™•์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—), ๋งž์ฃ ? ๊ทธ๋Ÿฌ๋ฉด ํ—ค๋”์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์— ๊ธ€๋ฆฌํ”„๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? "์‹œ์ž‘"์ด ๋งจ ์œ„์— ์žˆ๊ณ  "๋"์ด ์•„๋งˆ๋„ ํ—ค๋”์˜ ๋งจ ์•„๋ž˜์— ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธ€๋ฆฌํ”„๋ฅผ ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์— ExpandGlyphPlacementOffset๊ณผ ๊ฐ™์€ API๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋ง์„ ์ž˜๋ชปํ–ˆ๋„ค์š” "์ˆ˜ํ‰ ์—ด๊ธฐ ๋ชจ๋“œ"๋Š” ์ˆ˜ํ‰ ์ฐจ์›์ด ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‚ด์šฉ์ด ์ˆ˜ํ‰ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์„ธ๋กœ ๋ชจ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ผ์ชฝ ์ƒ๋‹จ๊ณผ ์™ผ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์•„์ด์ฝ˜์ด ์ค‘์•™์— ์œ„์น˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ด๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ—ค๋”๋Š” ํ™•์žฅ ์˜์—ญ์—์„œ ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ฑฐ๋‚˜ ์ฐจ์ง€ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ ์™ผ์ชฝ ์ƒ๋‹จ๊ณผ ์™ผ์ชฝ ํ•˜๋‹จ์€ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ™•์žฅ๊ธฐ๊ฐ€ ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅ๋˜๋ฉด start ๊ฐ€ ์™ผ์ชฝ(RTL์—์„œ ์˜ค๋ฅธ์ชฝ)์ด๊ณ  end ๊ฐ€ ์˜ค๋ฅธ์ชฝ(RTL์—์„œ ์™ผ์ชฝ)์ž…๋‹ˆ๋‹ค. ์ˆ˜ํ‰ ํ™•์žฅ์—์„œ start ๋Š” ์ƒ๋‹จ์ด๊ณ  end ๋Š” ํ•˜๋‹จ์ž…๋‹ˆ๋‹ค. CSS flex-start ๋ฐ flex-end์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Visual Studio๋Š” ๊ฐ€์šด๋ฐ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ™•์žฅ ๋‹จ์ถ” ์˜์—ญ์€ ์ „์ฒด ์ปจํŠธ๋กค์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

๋‹ซ์€:
image

ํผ์ง€๋Š”:

image

GlyphPlacement.Start .End .Above .Below
์•„๋งˆ๋„?

์•„์ฃผ ๋ฉ‹์ง„ ์•„์ด๋””์–ด ๊ฐ™์Šต๋‹ˆ๋‹ค! ์œ„์™€ ์•„๋ž˜๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์„๊นŒ์š”? Visual Studio๊ฐ€ ํ•˜๋Š” ์ผ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๊นŒ?

ExpandedGlyph
์ ‘ํžŒ ๊ธ€๋ฆฌํ”„
๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋กœ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ

์ด๊ฒƒ์€ ์ด๊ฒƒ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ด์ง€๋งŒ, ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์•„์ด์ฝ˜์„ ์›€์ง์ด๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ: ํšŒ์ „). ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์•„์ด์ฝ˜์„ ์™„์ „ํžˆ ์ „ํ™˜ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์šฐ์„ ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ˆ๋น„๋ฅผ ์ฑ„์šฐ๋Š” ํ—ค๋”๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜ํ…์ธ  ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Glyph์™€ ํ…์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

100%

์•Œ๋ฆผ ์„ผํ„ฐ์˜ ๊ฒฝ์šฐ ํ™•์žฅ๊ธฐ์™€ ๊ฐ™์€ ์ค„์— ๋ชจ๋‘๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ์š”? ํ™•์žฅ ํŒจ๋„์„ ํ™•์žฅ ํ—ค๋”์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ™•์žฅ๊ธฐ ์ œ์–ด๋กœ ๊ฐ„๋‹จํžˆ ๋‹ฌ์„ฑํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์šฐ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์˜ ๋ฐฐ์น˜๋Š” ๋งค์šฐ ๋…ํŠนํ•˜์ง€๋งŒ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ—ค๋”์™€ ํ™•์žฅ ์•„์ด์ฝ˜์ด ๊ฐ™์€ ์ค„์— ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ—ค๋”์™€ ์•„์ด์ฝ˜์„ ์„œ๋กœ ์˜†์— ๋‘๋Š” ํ‘œ์ค€ ํ™•์žฅ ์ปจํŠธ๋กค๋กœ ํ•˜๊ธฐ์—๋Š” ์ƒ๋‹นํžˆ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ฐธ์กฐ์šฉ ์˜ˆ์ž…๋‹ˆ๋‹ค.

image

๋‚˜๋Š” ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๊ฒŒ์‹œ๋œ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— ">"๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋Š” ์ˆ˜์ง์œผ๋กœ ํ™•์žฅํ•  ๋•Œ ํ™•์žฅ ๊ธ€๋ฆฌํ”„์— "v"๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธ€๋ฆฌํ”„์˜ ์œ„์น˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Expander ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ธ€๋ฆฌํ”„๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Felix-Dev ์œ ์ฐฝํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ์—์„œ ํ‘œ์ค€ํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ผ๊ด€๋œ ๋ชจ์–‘๊ณผ ๋Š๋‚Œ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ๋Š” ์•ฑ์ด ์ž์ฒด ๋””์ž์ธ ์–ธ์–ด๋ฅผ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ -- ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

ํŽธ์ง‘: ์ฒ˜์Œ ์ฝ์„ ๋•Œ Telerik ์˜ˆ์ œ๋ฅผ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ ๋ณต์žก์„ฑ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋„ˆ๋ฌด ๋งŽ์€ ์„ค๊ณ„ ์˜ต์…˜์„ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (1) ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค (2) ์—ญ์‚ฌ์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋งŽ์€ ๋ณต์žก์„ฑ์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์—ฌ๊ธฐ์—๋Š” ๋ฏธ์„ธํ•œ ์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋Š” ์ถฉ๋ถ„ํ•œ ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋””์ž์ธ ์–ธ์–ด๊ฐ€ ํ๋ฆฟํ•ด์งˆ ์ •๋„๋กœ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

WPF ๋˜๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ™•์žฅ ์ปจํŠธ๋กค์€ ์ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์†์„ฑ์„ ๋…ธ์ถœํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณด๊ธฐ์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋ฉฐ XAML์—์„œ๋งŒ ์ง€์†๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ธฐ ๋ชจ๋ธ(์ฆ‰, ์ด ๊ฒฝ์šฐ ์ปจํŠธ๋กค์˜ DP)์€ ๊นจ๋—ํ•˜์ง€ ์•Š์€ ์ปจํŠธ๋กค์—์„œ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ ์„ ํƒ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์•Œ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WPF ๋˜๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ™•์žฅ ์ปจํŠธ๋กค์€ ์ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์†์„ฑ์„ ๋…ธ์ถœํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณด๊ธฐ์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋ฉฐ XAML์—์„œ๋งŒ ์ง€์†๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ธฐ ๋ชจ๋ธ(์ฆ‰, ์ด ๊ฒฝ์šฐ ์ปจํŠธ๋กค์˜ DP)์€ ๊นจ๋—ํ•˜์ง€ ์•Š์€ ์ปจํŠธ๋กค์—์„œ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ ์„ ํƒ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์•Œ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@robloo ๊ธ€๋ฆฌํ”„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฒฝ๋Ÿ‰ ์Šคํƒ€์ผ๋ง์„ ํ†ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋Š” DP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปจํŠธ๋กค์˜ ๊ณต๊ฐœ API ํ‘œ๋ฉด์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ(์ปจํŠธ๋กค์˜ ๋ชจ์–‘)์— ํ›จ์”ฌ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ExpanderExpandGlyph ๋ฐ ExpanderCollapseGlyph (์˜ˆ: NavigationView์—๋Š” NavigationViewItemExpandedGlyph ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Œ)์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๊ธ€๋ฆฌํ”„ ๊ธฐํ˜ธ ์‚ฌ์šฉ์ž ์ง€์ •์„ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ Fluent Design ์Šน์ธ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•˜์—ฌ MDL2 ๊ธ€๊ผด์— ์žˆ๋Š” ๊ธ€๊ผด ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์œผ๋กœ ์ฝ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. MDL2 ๊ธ€๊ผด์„ ๋ณด๋ฉด ์›น์˜ ์˜ˆ์—์„œ ๋ณธ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ™•์žฅ/์ถ•์†Œ ๊ธ€๋ฆฌํ”„ ์•„์ด์ฝ˜(๋‹ค๋ฅธ ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘, +/-, +/- ์› ๋“ฑ)์ด ๋ชจ๋‘ ํฌํ•จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ์ „ํžˆ FontFamily( SymbolThemeFontFamily ๋ฆฌ์†Œ์Šค์—์„œ ์ œ๊ณต)๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ExpanderExpandGlyph ,... ๋ฆฌ์†Œ์Šค๋ฅผ ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ๊ณต์šฉ ๋ฆฌ์†Œ์Šค๋กœ๋งŒ ์ง์ ‘ ๋…ธ์ถœํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ์ž ์žฌ์ ์œผ๋กœ ๋จผ์ € ์•„์ด์ฝ˜์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ MDL2 ๊ธ€๊ผด ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค(๊ธ€๋ฆฌํ”„์šฉ Expander์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ๊ธ€๊ผด ํŒจ๋ฐ€๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์—).

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด, ์ฃผ์–ด์ง„ ์ปจํ…์ŠคํŠธ(NumberBox ์Šคํ•€ ๋ฒ„ํŠผ ๊ธ€๋ฆฌํ”„ ์‚ฌ์šฉ์ž ์ •์˜)์—์„œ ๊ณ ์ •๋œ ์•„์ด์ฝ˜ ์„ธํŠธ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๋•Œ WinUI๊ฐ€ ์†์‰ฌ์šด ์‚ฌ์šฉ์ž ์ •์˜ ๊ธ€๋ฆฌํ”„ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๊ฐˆ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค. : https://github.com/microsoft/microsoft-ui-xaml/issues/2789 ์ ์–ด๋„ ์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ์ผ๋ถ€๋Š” ์ด๋ฏธ ๊ทธ ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๊ธ€๋ฆฌํ”„) ์‚ฌ์šฉ์ž ์ •์˜ ์˜ต์…˜์„ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ์ฐธ์กฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์—ฌ๊ธฐ์—์„œ ์ฐพ์€ ์†”๋ฃจ์…˜์€ WinUI์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด NumberBox์˜ ๊ฒฝ์šฐ์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Felix-Dev ๊ฐ€๋ฒผ์šด ์Šคํƒ€์ผ๋ง์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์ถ”์ฒœ์ด ๊ฐ€์žฅ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "ํŽธ์ง‘: โ€‹โ€‹๊ฐ€๋ฒผ์šด ์Šคํƒ€์ผ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ.

๋ฌธ์ œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธ€๋ฆฌํ”„๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  BitmapIcon ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ FontIcon์˜ ์ผ๋ถ€ ํ˜•ํƒœ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์•„์ด์ฝ˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๊ธ€๋ฆฌํ”„๊ฐ€ ์•„๋‹Œ ์•„์ด์ฝ˜์ด ์‹ค์ œ๋กœ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ง€์ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ @robloo ๋ฐ @Felix-๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ธ€๋ฆฌํ”„(์‹ฌ๋ณผ ๊ธ€๊ผด์šฉ)์— ์‚ฌ์šฉํ•  ๊ฒฝ๋Ÿ‰ ์Šคํƒ€์ผ๋ง ๋ฆฌ์†Œ์Šค๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ .

๊ธ€๋ฆฌํ”„ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ธ€๊ผด์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์€ ํ•ญ์ƒ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

  • Segoe MDL2 ๋˜๋Š” FluentIcons๊ฐ€ ์žˆ๋Š” ๊ธ€๊ผด ๊ธ€๋ฆฌํ”„๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์•„๋งˆ๋„ ๊ธฐ๋ณธ๊ฐ’์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ธ€๋ฆฌํ”„๋„ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€๋Šฅ์„ฑ์€ ์ ์ง€๋งŒ ๋งค์šฐ ๊ฐ€๋Šฅํ•œ SVG์ธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿฐ ๋‹ค์Œ PNG ๋˜๋Š” ์ „์ฒด ๋น„ํŠธ๋งต์€ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์ง€๋งŒ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋“  ์ฒ˜์Œ ๋‘ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ ์„ธ ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ํ•ญ์ƒ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธ€๋ฆฌํ”„์šฉ ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์œ„์— ๋ฌด์—‡์ด๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Collapsed์—์„œ Expanded๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด VisualStates์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.


์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ - Lottie ์ปจํŠธ๋กค์„ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?


๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ RadioButton๊ณผ RadioButton์ด ๊ทธ๋ฃน์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ...

ํ™•์žฅ๊ธฐ ๊ทธ๋ฃน์ด ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ™•์žฅ๊ธฐ๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
image
https://explore.fast.design/components/fast-accordion

๊ธ€๋ฆฌํ”„ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ธ€๊ผด์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์€ ํ•ญ์ƒ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

Segoe MDL2 ๋˜๋Š” FluentIcons๊ฐ€ ์žˆ๋Š” ๊ธ€๊ผด ๊ธ€๋ฆฌํ”„๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์•„๋งˆ๋„ ๊ธฐ๋ณธ๊ฐ’์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธ€๋ฆฌํ”„๋„ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€๋Šฅ์„ฑ์€ ์ ์ง€๋งŒ ๋งค์šฐ ๊ฐ€๋Šฅํ•œ SVG์ธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ PNG ๋˜๋Š” ์ „์ฒด ๋น„ํŠธ๋งต์€ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์ง€๋งŒ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋“  ์ฒ˜์Œ ๋‘ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ ์„ธ ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ํ•ญ์ƒ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ…œํ”Œ๋ฆฟ์€ ํ•ญ์ƒ ์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ ๋ฌผ๋ก  ์ปจํŠธ๋กค์— (์ฃผ์š”) ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธ€๋ฆฌํ”„(๋ฐ ์•„์ด์ฝ˜ ๊ธ€๊ผด)๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์ด๋ฏ€๋กœ ๊ฐ€๋ฒผ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธ€๋ฆฌํ”„์šฉ ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์œ„์— ๋ฌด์—‡์ด๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Collapsed์—์„œ Expanded๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด VisualStates์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ถ•์†Œ/ํ™•์žฅ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์š”์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ - Lottie ์ปจํŠธ๋กค์„ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ฐ–๊ณ  ์‹ถ๋ƒ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์ „์€ ์ด๋ฏธ ์ถ”์ฒจ ์—†์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ RadioButton๊ณผ RadioButton์ด ๊ทธ๋ฃน์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ...

ํ™•์žฅ๊ธฐ ๊ทธ๋ฃน์ด ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ™•์žฅ๊ธฐ๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์€ ๋ณ„๋„์˜ ํ†ต์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์„œ๋กœ ๋ฐฐํƒ€์ ์ผ ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์—ด์–ด๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธ€๋ฆฌํ”„์šฉ ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์œ„์— ๋ฌด์—‡์ด๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Collapsed์—์„œ Expanded๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด VisualStates์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ถ•์†Œ/ํ™•์žฅ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์š”์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‘ ์ƒํƒœ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ๋˜๋Š” ContentPresenter์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์Šค์™‘ ์•„์›ƒ/ํ† ๊ธ€๋˜๋Š” ์ƒํƒœ๋‹น ํ•˜๋‚˜์”ฉ์ž…๋‹ˆ๊นŒ?

์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ - Lottie ์ปจํŠธ๋กค์„ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ฐ–๊ณ  ์‹ถ๋ƒ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์ „์€ ์ด๋ฏธ ์ถ”์ฒจ ์—†์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํšŒ์ „์€ ๊ธ€๋ฆฌํ”„๊ฐ€ ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ/๊ฐˆ๋งค๊ธฐํ˜•์ผ ๋•Œ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ์ข…์˜ ํŒ ๋˜๋Š” ํžŒํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์ „๊ตฌ๊ฐ€ ์ผœ์ง€๊ณ  ๊บผ์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? Lottie #2802๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ํ™”๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์•„์ด์ฝ˜ ์ œ์–ด์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ/๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ด ๋‹จ์ˆœํ•œ ์•„์ด์ฝ˜ ํšŒ์ „์ผ์ง€๋ผ๋„ ์ด ์ƒํ™ฉ์—์„œ ์ด๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๊นŒ?

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ RadioButton๊ณผ RadioButton์ด ๊ทธ๋ฃน์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ...
ํ™•์žฅ๊ธฐ ๊ทธ๋ฃน์ด ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ™•์žฅ๊ธฐ๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์€ ๋ณ„๋„์˜ ํ†ต์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์„œ๋กœ ๋ฐฐํƒ€์ ์ผ ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์—ด์–ด๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Fast Design์— ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋ณธ์งˆ์ ์œผ๋กœ ํ™•์žฅ๊ธฐ ๋ฌด๋ฆฌ์™€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹ค์ค‘ ๋ฐ ๋‹จ์ผ ๋™์ž‘ API๊ฐ€ ์žˆ๋‹ค๋Š” ์ ๋ฟ์ž…๋‹ˆ๋‹ค. Expander ์ปจํŠธ๋กค์ด ๋งŒ๋“ค์–ด์ง€๋ฉด Accordion์€ ๋…ผ๋ฆฌ์ ์ธ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ๊ฐœ๋ณ„ ๋ฐฉํ–ฅ์„ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉํ–ฅ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต์  ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธ€๋ฆฌํ”„์šฉ ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์œ„์— ๋ฌด์—‡์ด๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Collapsed์—์„œ Expanded๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด VisualStates์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ContentPresenter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ถ•์†Œ/ํ™•์žฅ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์š”์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‘ ์ƒํƒœ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ๋˜๋Š” ContentPresenter์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์Šค์™‘ ์•„์›ƒ/ํ† ๊ธ€๋˜๋Š” ์ƒํƒœ๋‹น ํ•˜๋‚˜์”ฉ์ž…๋‹ˆ๊นŒ?

๋‘ ์˜ต์…˜ ๋ชจ๋‘ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ContentPresenter์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ContentPresenter๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋‘ ๊ฐœ๋ฅผ ๊ฐ–๊ณ  ํ•˜๋‚˜๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ - Lottie ์ปจํŠธ๋กค์„ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ฐ–๊ณ  ์‹ถ๋ƒ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์ „์€ ์ด๋ฏธ ์ถ”์ฒจ ์—†์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํšŒ์ „์€ ๊ธ€๋ฆฌํ”„๊ฐ€ ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ/๊ฐˆ๋งค๊ธฐํ˜•์ผ ๋•Œ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ์ข…์˜ ํŒ ๋˜๋Š” ํžŒํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์ „๊ตฌ๊ฐ€ ์ผœ์ง€๊ณ  ๊บผ์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? Lottie #2802๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ํ™”๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์•„์ด์ฝ˜ ์ œ์–ด์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ/๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ด ๋‹จ์ˆœํ•œ ์•„์ด์ฝ˜ ํšŒ์ „์ผ์ง€๋ผ๋„ ์ด ์ƒํ™ฉ์—์„œ ์ด๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๊นŒ?

ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋ฉฐ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•„์ด์ฝ˜์œผ๋กœ ์›€์ง์ด๋Š” ์•„์ด์ฝ˜์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋‹ค๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ API๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๋™์ž‘์„ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ์• ๋‹ˆ๋ฉ”์ด์…˜ 2๊ฐœ์™€ ์•„์ด์ฝ˜ 2๊ฐœ? ๋˜๋Š” ์ค‘์ง€ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ 1๊ฐœ?)

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ RadioButton๊ณผ RadioButton์ด ๊ทธ๋ฃน์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ...
ํ™•์žฅ๊ธฐ ๊ทธ๋ฃน์ด ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ™•์žฅ๊ธฐ๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์€ ๋ณ„๋„์˜ ํ†ต์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์„œ๋กœ ๋ฐฐํƒ€์ ์ผ ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์—ด์–ด๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Fast Design์— ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋ณธ์งˆ์ ์œผ๋กœ ํ™•์žฅ๊ธฐ ๋ฌด๋ฆฌ์™€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹ค์ค‘ ๋ฐ ๋‹จ์ผ ๋™์ž‘ API๊ฐ€ ์žˆ๋‹ค๋Š” ์ ๋ฟ์ž…๋‹ˆ๋‹ค. Expander ์ปจํŠธ๋กค์ด ๋งŒ๋“ค์–ด์ง€๋ฉด Accordion์€ ๋…ผ๋ฆฌ์ ์ธ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ๊ฐœ๋ณ„ ๋ฐฉํ–ฅ์„ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉํ–ฅ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต์  ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์•„์ฝ”๋””์–ธ ์ปจํŠธ๋กค์€ ์ต์ŠคํŒฌ๋” ์ปจํŠธ๋กค ์ดํ›„์— ํ™•์‹คํžˆ ์ข‹์€ ์•„์ด๋””์–ด์ด๋ฉฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

ํšŒ์ „์€ ๊ธ€๋ฆฌํ”„๊ฐ€ ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ/๊ฐˆ๋งค๊ธฐํ˜•์ผ ๋•Œ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ์ข…์˜ ํŒ ๋˜๋Š” ํžŒํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์ „๊ตฌ๊ฐ€ ์ผœ์ง€๊ณ  ๊บผ์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? Lottie #2802๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ํ™”๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์•„์ด์ฝ˜ ์ œ์–ด์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ/๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ด ๋‹จ์ˆœํ•œ ์•„์ด์ฝ˜ ํšŒ์ „์ผ์ง€๋ผ๋„ ์ด ์ƒํ™ฉ์—์„œ ์ด๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๊นŒ?

ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋ฉฐ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•„์ด์ฝ˜์œผ๋กœ ์›€์ง์ด๋Š” ์•„์ด์ฝ˜์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋‹ค๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ API๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๋™์ž‘์„ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ์• ๋‹ˆ๋ฉ”์ด์…˜ 2๊ฐœ์™€ ์•„์ด์ฝ˜ 2๊ฐœ? ๋˜๋Š” ์ค‘์ง€ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ 1๊ฐœ?)

์ด๊ฒƒ์€ ํฐ ์งˆ๋ฌธ์ด๋ฉฐ ์†”์งํžˆ ๋งํ•ด์„œ Animated Icon ์ œ์•ˆ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ญ์ƒ ํ™”์‚ดํ‘œ์ธ ๊ฒฝ์šฐ ๊ธ€๋ฆฌํ”„/์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ž์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†๋Š” ํ•œ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.

ํšŒ์ „ํ•˜๋Š” Lottie ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์œ ์ง€๋˜๋ฏ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ์ž‘์—…์ด ์กฐ๊ธˆ ๋” ๋งŽ์•„์ง€์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•„์ด์ฝ˜๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด ๋” ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์‰ฌ์šด ์˜ต์…˜์€ ๊ธ€๋ฆฌํ”„์— ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ๋งŽ์ด ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

์›น์„ ์‚ดํŽด๋ณด๋ฉด ์ผ๋ฐ˜์ ์ธ Expander UI ์˜ˆ์ œ์—์„œ ํ™•์žฅ/์ถ•์†Œ ๊ธ€๋ฆฌํ”„์— ์‚ฌ์šฉ๋˜๋Š” ์ •์  ์•„์ด์ฝ˜์„ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows์—์„œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ์ด ์ปจํŠธ๋กค์˜ ์ž ์žฌ ๊ณ ๊ฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์…ธ์˜ NavigationView ๋ฐ ์•Œ๋ฆผ ์•Œ๋ฆผ ์ฐธ์กฐ). ๋ชจ์…˜ ์€ Fluent Design์˜ ์ดˆ์„ ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ ์ปจํŠธ๋กค์„ ๋‹ค์‹œ ํ…œํ”Œ๋ฆฟํ™”ํ•  ํ•„์š” ์—†์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธ€๋ฆฌํ”„๋ฅผ ์›ํ•˜๋Š” ๊ณ ๊ฐ์„ ์œ„ํ•ด ์˜ต์…˜์„ ์—ด์–ด ๋‘๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” MS์˜ ์—ฌ๋Ÿฌ ํŒ€์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธ€๋ฆฌํ”„(์˜ˆ: ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ™”์‚ดํ‘œ ๊ธ€๋ฆฌํ”„)๊ฐ€ ์žˆ๋Š” Expander๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ปจํŠธ๋กค์ด ๋‚ด์žฅ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๊ด€๋œ ๊ฒฝํ—˜์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒ€์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ ธ์•ผ ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์† ์‹œ๊ฐ„, ๋‹ค๋ฅธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐฉํ–ฅ(์˜ˆ: ์‹œ๊ณ„ ๋ฐฉํ–ฅ ๋˜๋Š” ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ),...๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด ์•Œ๋ฆผ์— ๋Œ€ํ•œ ๋ฌธ์ž ๋ชจ์–‘์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ก์…˜ ์„ผํ„ฐ๋Š” NavigationView์˜ ๊ธ€๋ฆฌํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋” ์ฆ๊ฒ๊ณ  UI๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํšŒ์ „ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ํ•˜๋“œ ์ฝ”๋”ฉ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ํ•ด๋‹น ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ AnimatedIcon ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์œ ์—ฐํ•œ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“œ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ƒˆ ์ปจํŠธ๋กค์˜ Raison Detra์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธ€๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ธ์ •๋œ ๊ฒฝ์šฐ - ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•ญ์ƒ ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ์›€์ง์ด๊ณ  ๋ฌด์—‡์„ ์›€์ง์ด์ง€ ๋ง์•„์•ผ ํ•˜๋Š”์ง€๋Š” ๋งค์šฐ ์–ด๋ ค์šด ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. Martin์ด ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•ญ์ƒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜ ์•„์ด์ฝ˜์—๋Š” ์—ฌ์ „ํžˆ ๋งŽ์€ ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

v1์šฉ ๊ธ€๋ฆฌํ”„/์•„์ด์ฝ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ธ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์žฌ๊ณ ํ•ด์•ผ ํ•  ํ•œ ๊ฐ€์ง€๋Š” ๊ณ„์ธต์  NavigationView์—์„œ ๊ธฐ์กด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ท ์ผํ•œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ TreeView์™€ h-NavigationView ์‚ฌ์ด์—๋Š” ์ด๋ฏธ ์•„์ด์ฝ˜ ์ „ํ™˜์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™”ํ•˜๊ฑฐ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™”ํ•˜์ง€ ์•Š๋Š” ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ. ๋งˆ์ง€๋ง‰ ๋‹จ๋ฝ์—์„œ ์—ฌ๊ธฐ์—์„œ ๋ชจ๋“  ํƒ์ƒ‰์„ ๋ฐฉํ•ดํ•˜๋ ค๋Š” ์˜๋„๋Š” ์—†์—ˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๊ณผ์ œ ์ค‘ ํ•˜๋‚˜๋Š” "๊ถ๊ทน์ ์ธ ๊ฒƒ" ์ด์™ธ์˜ ์ถฉ๋ถ„ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์ปจํŠธ๋กค์ด Windows์— ์ž ์žฌ์ ์œผ๋กœ ๋œ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  ๋” ๋งŽ์€ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ๋ณด์•˜๋“ฏ์ด ์•„์ด์ฝ˜ ์‚ฌ์šฉ์ž ์ •์˜์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์›(์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋‚ด์žฅ๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์ถ”๊ฐ€ํ•˜์—ฌ)์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋ ค๋Š” ๊ฒƒ์ด ์„œ๋กœ ์‰ฝ๊ฒŒ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows Shell๊ณผ ๊ฐ™์€ ์ž ์žฌ ๊ณ ๊ฐ์ด ์—ฌ๊ธฐ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ณด๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 10X๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์•ฝ๊ฐ„์˜ ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์ด๋ฉฐ Windows Shell ๋ฐ ๊ธฐ๋ณธ ์ œ๊ณต Windows ์•ฑ์€ ์—ฌ๊ธฐ์—์„œ "๊ณ ๊ฐ"์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธ€๋ฆฌํ”„๊ฐ€ Windows ํŒ€์ด 10X๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋Š” ์ „์ฒด UX์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒฝ์šฐ ์ง€๊ธˆ์€ ์ด ๋„์ „์— "ํŽ€ํŠธ"ํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  V1์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์›์„ ์ œ๊ณตํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์•„์ด์ฝ˜์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ์ผ๊ด€๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” Animated Icon ์ œ์•ˆ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” NavigationView์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” WinUI์— ๋Œ€ํ•œ ์™„์ „ํžˆ ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋œ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์œ ์‚ฌํ•œ ์ปจํŠธ๋กค์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์˜๋„์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋‹จ ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ปจํŠธ๋กค์€ NavigationView์— ์ถ”๊ฐ€๋จ

ElementAnimator ๋Š” Expander์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ๊ณ  ExpandTransition ๋ฐ CollapseTransition ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

@mdtauk ๋ชฉ์—… ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋งŒ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ™•์žฅ ๋ฐ ์ถ•์†Œ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ๋ง์”€ํ•˜์‹  ๋‚ด์šฉ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„์ฝ”๋””์–ธ ๋™์ž‘์ด IsExpanded๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉ๋ก ์ˆ˜์ค€ ๋…ผ๋ฆฌ(์ƒˆ๋กœ์šด Accordion ์ปจํŠธ๋กค์ด ์•„๋‹Œ)๋ฅผ ํ†ตํ•ด ๋‹ฌ์„ฑ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋…ผ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค(์˜ˆ: ์ผ๋ถ€ ํ™•์žฅ๊ธฐ๊ฐ€ ์„œ๋กœ ๋‹ซํžˆ๊ณ  ๋‹ค๋ฅธ ํ™•์žฅ๊ธฐ๊ฐ€ ๋™์‹œ์— ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ)์— ๋งž๊ฒŒ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Felix-Dev - ์ œ์•ˆ์— Telerik Expander๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธ€๋ฆฌํ”„ ๋ชจ์–‘ : ExpanderExpandGlyph ๋ฐ ExpanderCollapseGlyph ํ•˜์—ฌ ๊ธ€๋ฆฌํ”„์™€ ์•„์ด์ฝ˜ ๊ธ€๊ผด์„ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ๊ฒฝ๋Ÿ‰ ์Šคํƒ€์ผ์ด ์„ ํ˜ธ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. v1 Expander์— ์ด ์ˆ˜์ค€์˜ ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@Felix-Dev ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ์ „ํžˆ FontFamily(SymbolThemeFontFamily ๋ฆฌ์†Œ์Šค์—์„œ ์ œ๊ณต)๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ExpanderExpandGlyph ๋งŒ ์ง์ ‘ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ์ž ์žฌ์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒฝ์šฐ MDL2 ๊ธ€๊ผด ํŒจ๋ฐ€๋ฆฌ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„์ด์ฝ˜์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๊ธ€๋ฆฌํ”„์šฉ Expander์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ๊ธ€๊ผด ๋ชจ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์—).

๊ธ€๋ฆฌํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜ : ํ™•์žฅ ์‹œ ๋‹ค๋ฅธ ๊ธ€๋ฆฌํ”„๋กœ์˜ ๋ณ€๊ฒฝ ํฌํ•จ - AnimatedIcon #2802๋กœ ๋ถ€๋ถ„์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ค€์˜ ์‚ฌ์šฉ์ž ์ •์˜๋Š” v1 Expander์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
@chingucoding์ด ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

v1์šฉ ๊ธ€๋ฆฌํ”„/์•„์ด์ฝ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ธ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ธ€๋ฆฌํ”„ ์œ„์น˜ : v1 Expander์—์„œ ์ด ์ˆ˜์ค€์˜ ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? v1์— ExpandDirection ๊ณผ ๊ธ€๋ฆฌํ”„ ์œ„์น˜ ๋ณ€๊ฒฝ ์˜ต์…˜์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ด๋Š” ๋”์šฑ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. @Felix-Dev ์„ค๋ช…

TopLeft, TopRight, BottomCentered(๋ฐ ๋” ๋งŽ์€(Left, Right, ...)) ๊ฐ’์ด ์žˆ๋Š” ExpandGlyphPlacementMode์™€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋ณธ ์œ„์น˜(๋ฐฐ์น˜ ๋ชจ๋“œ๋กœ ์„ค์ •)๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ExpandGlyphPlacementOffset ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ๋ง์— ์žˆ์—ˆ๋˜ ํ›Œ๋ฅญํ•œ ํ† ๋ก ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ–ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”! ์ด์— ๋Œ€ํ•ด ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ์ƒ๊ฐ์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

๊ธ€๋ฆฌํ”„ ๋ชจ์–‘
๊ธ€๋ฆฌํ”„ ์œ„์น˜

V1์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์‰ฝ๊ณ  ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ์ •์˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ธ€๋ฆฌํ”„๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

๊ธ€๋ฆฌํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜
์ƒํƒœ ์ „ํ™˜

์šฐ์„  ์ˆœ์œ„ ์ง€์ •์ด ํ•„์š”ํ•˜๊ณ  ํ•ต์‹ฌ ๋™์ž‘ ๋ฐ ๊ธฐ๋Šฅ์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ @mdtauk์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ƒˆ๋กœ์šด ๊ณต๊ฐœ ์งˆ๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Expander๋Š” InfoBar์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? InfoBar์— ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? InfoBar๋ฅผ Expander์˜ ์ฝ˜ํ…์ธ ๋กœ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฐ˜์ „?

๋‚ด์šฉ์„ ๋Œ€์ฒดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ •๋ณด ํ‘œ์‹œ์ค„์„ ๋””์ž์ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ™•์žฅ๊ธฐ ๋””์ž์ด๋„ˆ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ ‘์„ ์ˆ˜ ์žˆ๋Š” ํ‘œ์‹œ์ค„์— ๋Œ€ํ•œ ๋””์ž์ธ ์‚ฌ์–‘์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•  ๋Œ€ํ™”๋‹ค.

์—ฌ๊ธฐ _๋งŽ์€_ ๋Œ€ํ™”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค! ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฃผ์ œ์—...

ElementAnimator๊ฐ€ Expander์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋ฉฐ ExpandTransition ๋ฐ CollapseTransition์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

ElementAnimator๊ฐ€ Expander์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ItemsRepeater์— ์žˆ์œผ๋ฉด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ElementAnimator๋Š” ์•„์ง ItemsRepeater ์™ธ๋ถ€์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋ก ์ ์œผ๋กœ ExpandTransition๊ณผ CollapseTransition์ด ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ Transition API๊ฐ€ ์ด๋ก ์ƒ์œผ๋กœ๋Š” ์ข‹์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ข‹์ง€ ์•Š๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋งŽ์ด ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํŠธ๋กค๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๋ฉฐ OS hooks์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— WinUI 2.x ์‹œ๋ฆฌ์ฆˆ์—์„œ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ • ์ „ํ™˜์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ThemeTransition API ์ปฌ๋ ‰์…˜์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹ค๋ฅธ ์˜ต์…˜์„ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡๋ณด๋‹ค๋„ ์ƒˆ๋กœ์šด UI ์š”์†Œ๊ฐ€ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๊ณ /๋Š˜๊ณ /์ค„์ด๊ฑฐ๋‚˜/๋– ๋‚˜๋ฉด์„œ ์ฝ˜ํ…์ธ ๊ฐ€ ์ด๋™ํ•˜๋Š” "๋ ˆ์ด์•„์›ƒ ์• ๋‹ˆ๋ฉ”์ด์…˜"์˜ ์ผ๋ฐ˜์ ์ธ ์˜์—ญ์€ ์˜ค๋Š˜๋‚  ํ”Œ๋žซํผ์ธ Xaml์—์„œ ์ œ๋Œ€๋กœ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด WinUI 3๋„ ํ•„์š”ํ•˜์ง€๋งŒ ์ฆ‰๊ฐ์ ์ธ ๋กœ๋“œ๋งต์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ Expander์˜ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ์กฐ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
1) Expander ์ฝ”๋“œ์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ™•๋Œ€/์ถ•์†Œ๋ฅผ ํ•˜๋“œ ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  API๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ)
2) ํ™•์žฅ๊ธฐ ์•„๋ž˜์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์•„๋ž˜๋กœ "๋›ฐ์–ด๋‚ด๋ฆฌ๋Š”" ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„๋ž˜๋กœ ๋ฏธ๋„๋Ÿฌ์ง€๋„๋ก ํ™•์žฅ๊ธฐ ์ฃผ๋ณ€์˜ ์ฝ˜ํ…์ธ ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•ฑ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ง€์นจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” (2)๊ฐ€ "๋ ˆ์ด์•„์›ƒ ์• ๋‹ˆ๋ฉ”์ด์…˜" ์—†์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ์•„๋งˆ๋„ Expander ์•„๋ž˜์˜ ์ฝ˜ํ…์ธ ์—์„œ RepositionThemeAnimation์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@stmoy ๊ธฐ์กด ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด (1)์— PopInThemeAnimation์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์€ ์‚ฌ์–‘ ์ž‘์„ฑ์„ ์œ„ํ•ด ์Šน์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

WinUI ํŒ€๊ณผ์˜ ๋…ผ์˜์˜ ์ผํ™˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” Expander๊ฐ€ V1์˜ ์œ„/์•„๋ž˜ ํ™•์žฅ์„ ์œ„ํ•ด ExpandDirection์„ ์ง€์›ํ•˜๋„๋ก ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Expander์— ๋Œ€ํ•ด ๋ณธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ๊ณ  ํ–ฅํ›„ ์ž ์žฌ์ ์œผ๋กœ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ํ™•์žฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ† ๋Œ€๋ฅผ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋ฅผ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘ ๋ฐ ๊ด€๋ จ PR์ด ์ œ๊ณต๋˜๋ฉด ๋” ์ž์„ธํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ๊ณต๊ฐœ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • Expander๋Š” InfoBar์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? InfoBar์— ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? InfoBar๋ฅผ Expander์˜ ์ฝ˜ํ…์ธ ๋กœ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฐ˜์ „?

InfoBar์˜ ๊ฒฝ์šฐ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌด์—‡์ด ํ•„์š”ํ•˜๊ณ  ์ด Expander ์ปจํŠธ๋กค์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ์ œ์•ˆ์„ ์—ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • InfoBar๋Š” Expander ์ปจํŠธ๋กค์˜ ํ—ค๋”์™€ ์ฝ˜ํ…์ธ /์ฐฝ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. InfoBar๋Š” ์ ‘ํž ๋•Œ ํ—ค๋”์— "์ž˜๋ผ๋‚ด๊ธฐ" ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•˜๊ณ  ์—ด ๋•Œ ํ™•์žฅ๋œ ์ฝ˜ํ…์ธ /์ฐฝ์— ์ „์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • InfoBar๋Š” ์ž๋ฅด๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ _have_ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ "shouldTruncate" ์†์„ฑ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ๋ž˜ํ•‘ ๋™์ž‘์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ˜ํ…์ธ ๊ฐ€ ๋” ์ด์ƒ ํ•œ ์ค„์— ๋งž์ง€ ์•Š๊ณ  shouldTruncate๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ InfoBar๋Š” Expander๊ฐ€ ๋  ์ˆ˜/์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ™•์žฅ ๋™์ž‘์„ ์ •ํ™•ํžˆ ์–ธ์ œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๊นŒ๋‹ค๋กœ์›Œ์ง€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š MessageBar๋Š” isMultiline ์†์„ฑ์„ ํ†ตํ•ด ์ด๋ฅผ ์™„ํ™”ํ•˜์ง€๋งŒ ์ด ์˜์—ญ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ƒ๊ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด Expander ๋™์ž‘์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” WinUI์˜ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

InfoBar๋ฅผ ์ž๋ฅด๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ดˆ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ:
Expand/collapse

๊ตฌํ˜„์„ ์œ„ํ•ด ๋‚ด ์ดˆ๊ธฐ ์ƒ๊ฐ์€ InfoBar๊ฐ€ Expander์—์„œ ํŒŒ์ƒ๋˜์–ด์•ผ ํ•˜๊ณ  Expander์˜ ์ฝ˜ํ…์ธ  ์•ˆ์— ์ค‘์ฒฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒ๊ฐ?

ํ˜„์žฌ ์ด Expander ๋™์ž‘์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” WinUI์˜ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

InfoBar๋ฅผ ์ž๋ฅด๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ดˆ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ:
Expand/collapse

์ต์ŠคํŒฌ๋”๋Š” ํ™•์žฅ๋˜๋Š” ์ฝ˜ํ…์ธ ์—์„œ ๊ฐˆ๋งค๊ธฐ ๋ชจ์–‘ ๋ฒ„ํŠผ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

image
์•Œ๋ฆผ์ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ InformationBar ์ปจํŠธ๋กค์ด Expander๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ฆฌํ•˜๋ฉด ํ–‰๋™/์†์„ฑ์ด๋ฉ๋‹ˆ๊นŒ? ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ์— UI ์š”์†Œ ๋˜๋Š” ๋ฒ„ํŠผ์„ ์ง€์ •ํ•˜๋ฉด ํ™•์žฅ๊ธฐ ํ—ค๋”์— ํ•ด๋‹น ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ตฌํ˜„์„ ์œ„ํ•ด ๋‚ด ์ดˆ๊ธฐ ์ƒ๊ฐ์€ InfoBar๊ฐ€ Expander์—์„œ ํŒŒ์ƒ๋˜์–ด์•ผ ํ•˜๊ณ  Expander์˜ ์ฝ˜ํ…์ธ  ์•ˆ์— ์ค‘์ฒฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒ๊ฐ?

Expander๊ฐ€ Toggle/Disclose ๋ฒ„ํŠผ์—์„œ ์ฝ˜ํ…์ธ ์™€ ํ—ค๋”๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด InformationBar์— ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Expander ์ปจํŠธ๋กค์€ ํŠนํžˆ Windows Shell์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ž์œผ๋กœ ๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ ์ปจํŠธ๋กค์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ๋Œ€ํ•œ ์œ ์—ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Expander ์‚ฌ์–‘ ์— ์ดˆ๊ธฐ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ณ  PR์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‚ฌ์–‘์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๊ณ„์†ํ•ด ์ฃผ์„ธ์š”! ์‚ฌ์–‘ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” PR 100์ž…๋‹ˆ๋‹ค ๐Ÿ˜„

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰