WPF Canvas Zoom Focus ์˜ค๋ฅ˜ ์›์ธ ??

CanvasError

Canvas Zoom In/Out ์„ Google ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
ํ—Œ๋ฐ ZoomScale=ZoomValue ๊ฐ’์„ Binding ์ฒ˜๋ฆฌํ•ด์„œ Button Click์‹œ Value๊ฐ’์„ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์žˆ์–ด์š”,
ํ•˜์ง€๋งŒ Focus๋ฅผ ์žƒ์œผ๋ฉด ๋ฐ˜์‘์ด ์—†์–ด์ ธ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
๋ถ€์กฑํ•œ ์‹ค๋ ฅ์— ๋„์›€ ์š”์ฒญ ๋“œ๋ ค์š”

image

2๊ฐœ์˜ ์ข‹์•„์š”

ํ˜น์‹œ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

2๊ฐœ์˜ ์ข‹์•„์š”

null

1๊ฐœ์˜ ์ข‹์•„์š”

์˜ฌ๋ ค์ฃผ์‹  zip ํŒŒ์ผ ๋ฐ›์•„์„œ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•ด ๋ณด์•˜๋Š”๋ฐ

์ผ๋‹จ ์ž‘์„ฑํ•ด์ฃผ์‹  ์ฝ”๋“œ์—์„œ [Click] ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„๋•Œ ์•„๋ฌด ๋™์ž‘์ด ์—†๋Š”๋ฐ

๋ฌธ์ œ๊ฐ€ ์ด๊ฒŒ ๋งž๋‚˜์š”?

์˜†์— [FocusLoss] ๋ฒ„ํŠผ๊ณผ๋Š” ์ƒ๊ด€์—†์ด [Click] ๋ฒ„ํŠผ์€ ์•„๋ฌด ๋™์ž‘์ด ์—†์Šต๋‹ˆ๋‹ค.

[Click] ๋ฒ„ํŠผ Command๋กœ ๋ฐ”์ธ๋”ฉ ๋œ ZoomValue ๊ฐ’์œผ๋กœ ํ™•๋Œ€/์ถ•์†Œ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฑธ ์›ํ•˜์‹œ๋Š” ๊ฑฐ๋ผ๋ฉด

ZoomRate="{Binding ZoomValue}

๋ถ€๋ถ„์— Mode ์†์„ฑ์„ ๋ถ€์—ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ZoomRate="{Binding ZoomValue, Mode=TwoWay}"
1๊ฐœ์˜ ์ข‹์•„์š”

์•„โ€ฆ์ด๋ถ€๋ถ„ ์ด์—ˆ๊พผ์š”โ€ฆ!
ํŠน์ • ์ปจํŠธ๋กค์— Focus๋ฅผ ๋บ๊ธฐ๋ฉด ์•ˆ๋˜๋Š” ์ฆ์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ๋˜์—ˆ์–ด์š”โ€ฆ!
์‹ค๋ก€๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ํ•œ๊ฐ€์ง€ ๋” ์•Œ๊ณ ์‹ถ์€ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ,
VisualBrush์˜ Visibility๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•˜๋ ค ํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ์š” ?
VisualBrush๋Š” Container ํ• ๋‹น์‹œ Background์— ํ• ๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

Brush๋Š” Visibility ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ๋ชฉ์ ์ด๋ผ๋ฉด ContentPresenter ์ปจํ…์ธ  ๋Œ€์ƒ์ธ Canvas ์ž์ฒด๋ฅผ Visibility ๋ฐ”์ธ๋”ฉ ๊ฑธ์–ด์„œ ์ฒ˜๋ฆฌ ํ•˜๋˜์ง€

Canvas ์˜ Background๋ฅผ ํˆฌ๋ช…์œผ๋กœ ์ฒ˜๋ฆฌ ํ•˜๋˜์ง€ ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

๊ฒฉ์ž๋ˆˆ๊ธˆ์„ ์กฐ๊ฑด์ ์œผ๋กœ ๋ณด์—ฌ์ง€๊ฑฐ๋‚˜, ์•ˆ๋ณด์—ฌ์ง€๊ฒŒ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์˜๋„์ธ๋ฐ ์ข‹์€ ๋ฐฉ์•ˆ์€ ์—†๋‚˜๋ณด๊ท ์š”โ€ฆ!

1๊ฐœ์˜ ์ข‹์•„์š”

์บ”๋ฒ„์Šค์— Visibility ๋ฐ”์ธ๋”ฉ ํ•ด์„œ

์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ณด์˜€๋‹ค ์•ˆ๋ณด์˜€๋‹ค ์ฒ˜๋ฆฌ ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?

1๊ฐœ์˜ ์ข‹์•„์š”

Canvas๋ฅผ ContentPresenter์˜ Content๋กœ Binding ํ•˜๊ณ ,
Viewmodel ๋‚ด์—์„œ Canvas๋ฅผ ๋™์ ์œผ๋กœ Add ์‹œ์ผœ์ฃผ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.
Canvas ๋™์ ์œผ๋กœ Background๋„ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๊ณ , ๋™์  Binding ๋ฐฉ์‹์€ ์•ˆ์จ๋ด์„œ ์ฐพ์•„๋ณด๊ณ ์žˆ์Šต๋‹ˆ๋‹คโ€ฆ!

1๊ฐœ์˜ ์ข‹์•„์š”

์ปค์Šคํ…€ ์ปจํŠธ๋กค์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ณด์‹œ๊ณ  ์ฐธ๊ณ ํ•ด์„œ ์‘์šฉํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[์ฝ”๋“œ git]

code_check/QnA/WPF/CanvasFocusError at main ยท tyeom/code_check (github.com)


**[๊ฒฐ๊ณผ]** ![Canvas_Zoom_Out|690x418](upload://1OWXVyQScpAU1at8sh6KsXrbD42.gif)

๏ผŠ ์—‡ gif ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๊ฐ€ ์ž˜ ์•ˆ๋˜๋„ค์š”โ€ฆ? ;;

2๊ฐœ์˜ ์ข‹์•„์š”

Canvas_Zoom_Out

4๊ฐœ์˜ ์ข‹์•„์š”

์ •๋ง ์šฐ์„  ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์„ ๋จผ์ € ํ•˜๋Š”๊ฒŒ ๋งž๋Š”๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค !

์ตœ์ข…์ ์œผ๋กœ ์ œ๊ฐ€ ์›ํ•˜๋˜ ContentPresenter๋ฅผ ์ด์šฉํ•œ Canvas๋ฅผ ์ด์–ด๋ถ™์ด๋Š”(?) ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด ๋…ธ๋ ฅ์ค‘ ์ž…๋‹ˆ๋‹ค. (Children์„ ๋ถ™์˜€๋‹ค ๋—๋‹ค ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จโ€ฆ? )
์˜ˆ์ œ๋กœ ๋งŒ๋“ค์–ด์ฃผ์‹  ์ž๋ฃŒ๋Š” ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์—†๋Š” ์ข‹์€ ์ž๋ฃŒ์ž„์ด ํ™•์‹คํ•˜๊ฒŒ ๋А๊ปด์ง€๋„ค์š”.
์ข€ ๋” ์‘์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์„ ์ฐพ์•„์„œ ์—…๋ฐ์ดํŒ… ํ•ด๋ณด๋ฉด ๋ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค !

3๊ฐœ์˜ ์ข‹์•„์š”