WPF Resize ์งˆ๋ฌธ..

์•ˆ๋…•ํ•˜์„ธ์š”.

WPF ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค :slight_smile:

๋จผ์ € ๊ตญ๋‚ด ๋‹ท๋„ท ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ดํŠธ์˜ ๋ถ€์žฌ๋กœ ์†Œํ†ตํ•  ๊ณณ์ด ๋ถ€์กฑํ•œ๋ฐ..

์ด๋Ÿฐ ์†Œ์ค‘ํ•œ ๊ณณ ๋งˆ๋ จํ•ด์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค ^^.

๋‹ต๋ณ€ ํ•ด์ฃผ์‹œ๋Š” ๋ชจ๋“  ๋ถ„๊ป˜ ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ์˜ ์ธ์‚ฌ๋ฅผ ๋“œ๋ฆฌ๋ฉด์„œโ€ฆ ์งˆ๋ฌธ์„ ๋“œ๋ ค๋ณด๋ฉดโ€ฆ

Winform ๊ฐœ๋ฐœ์‹œ์—โ€ฆ Form Resize๋กœ ์ธํ•ด.. UI ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

WM_ENTERSIZEMOVE ์ด๋ฒคํŠธ์— SuspendLayout

WM_EXITSIZEMOVE ์ด๋ฒคํŠธ์— ResumeLayout

์ด๋ฒคํŠธ๋ฅผ ํ• ๋‹นํ•˜์—ฌ, ๋ฆฌ์‚ฌ์ด์ฆˆ ํฌ๊ธฐ๊ฐ€ ํ™•์ • ๋˜๊ธฐ ์ „๊นŒ์ง€.. UI ์ž‘์—…์„ ์ค‘๋‹จ ์‹œ์ผฐ์—ˆ๋Š”๋ฐ์š”โ€ฆ

WPF์—๋Š” ์ €๋Ÿฐ Layout ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คโ€ฆ

image

์ด๋Ÿฐ ์‹์œผ๋กœ ์‹œ๋„๋ฅผ ํ•ด๋ดค๋Š”๋ฐโ€ฆ Enter ์ด๋ฒคํŠธ ์ง„์ž… ํ›„ Window ๋ฆฌ์‚ฌ์ด์ฆˆ๊ฐ€ ์•„์ฃผ ์พŒ์ ํ•ด์ง€๋ฉด์„œโ€ฆ ์ž˜ ์ž‘๋™ํ•˜๋Š”๋ฐโ€ฆ

DispacherProcessingDisabled ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํŒŒ๊ดด์‹œ์ผœ๋„โ€ฆ ์ค‘๋‹จ ๋œ UI๊ฐ€ ๋ณต๊ท€ ๋˜์ง€ ์•Š๋”๊ตฐ์š”โ€ฆ

image

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ ธ๋‚˜โ€ฆ ์š”์ฆ˜ ๋‹ค๋ฅธ ์•ฑ๋“ค์ฒ˜๋Ÿผโ€ฆ Resize๋ฅผ ์พŒ์ ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ์š” ^^

์ข‹์€ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

DispacherProcessingDisabled() ์ดํ›„ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฏ€๋กœ ์•„๋งˆ HookProc์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†”๋ฃจ์…˜์ด ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ

์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” Content๊ฐ€ content๋ผ ๊ฐ€์ • ํ•˜๋ฉด ๋‹ค์Œ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    const int WM_ENTERSIZEMOVE = 0x0231;
    const int WM_EXITSIZEMOVE = 0x0232;

    if (msg is WM_ENTERSIZEMOVE)
    {
        content.Width = content.ActualWidth;
        content.Height = content.ActualHeight;
        Debug.WriteLine("ENTER!");
    }
    else if (msg is WM_EXITSIZEMOVE)
    {
        content.Width = double.NaN;
        content.Height = double.NaN;

        Debug.WriteLine("EXIT!");
    }

    return IntPtr.Zero;
}

| ์‚ฌ์ด์ฆˆ ์กฐ์ • ์‹œ

| ์‚ฌ์ด์ฆˆ ์กฐ์ • ์™„๋ฃŒ ์‹œ

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

์ข‹์€ ์•„์ด๋””์–ดโ€ฆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คโ€ฆ

ํ…Œ์ŠคํŠธ ํ•œ๋ฒˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค +.+

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