[WPF] 윈도우 최소크기 설정이 안됩니다.

해결되었습니다.

WindowResizer.cs가 윈도우 리사이징 및 마우스 포인트 등등을 긁어오는데
MinHeight, MinWidth에 대한 값을 긁어오는 부분이 없었습니다.


사진과 같이 최소 크기를 각각 400으로 설정했습니다.
디자이너에서 마우스로 아무리 땡겨봐도 400이하로 줄어들진 않습니다만…
디버깅 후 점이 되어 안보일정도로 윈도우창이 줄여집니다.
image

윈도우 최소크기 설정은 잘되던 것이 어느 순간부터 안됩니다…
반대로 최대크기 설정은 잘먹힘니다.

저장소 : [깃허브]

2개의 좋아요

WindowResizer에서 윈도우 크기를 핸들링하면서 최소 크기 설정이 무시되는 듯합니다. ViewModel에서 WindowResizer를 제외하거나 해당 클래스 안에 ptMinTrackSize를 받아오는 부분을 추가해 보시기 바랍니다.

6개의 좋아요

코드를 확인해보니

WindowResizer 쪽 에서 윈도우 메세지 처리를 하는 것 같은데

0x0024 메세제에서
최소 사이즈, 최대 사이즈 무시처리 됩니다.

handled = true 부분 입니다.

※ 투머치인데 ViewModel에 View자체를 넘겨 처리하는 행위는 MVVM패턴 위반 이며,
INotifyPropertyChanged 미구현 속성은 메모리 누수 대상 입니다.

7개의 좋아요

※ 투머치인데 ViewModel에 View자체를 넘겨 처리하는 행위는 MVVM패턴 위반 상태 입니다.

저도 배우는 입장이지만 짧은 식견으로나마 @aroooong 님의 말씀에 의견을 더하자면 굳이 View를 ViewModel에 직접 주입하는 게 아니더라도 최소/최대 크기나 리사이즈 등 비즈니스 로직과 연관없는 UI 로직을 ViewModel에서 처리하는 것도 MVVM 패턴에 어긋나는 것으로 생각합니다.

코드 비하인드에서 처리하거나, 코드 비하인드를 비우려면 behavior 등 다른 방법으로 View 안에서 처리하는 게 어떨지요.

6개의 좋아요

@루나시아 @aroooong
안녕하세요.
댓글 감사합니다.

알려주신 힌트로 최소크기 설정했습니다.

MINMAXINFO lMmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));

var minSize = new Point(mWindow.MinWidth, mWindow.MinHeight);
lMmi.ptMinTrackSize.X = (int)minSize.X;
lMmi.ptMinTrackSize.Y = (int)minSize.Y;

ptMinTrackSize이 최소 값을 잘 받아오네요.


조언 감사합니다.
다만 제가 부족해서 UI를 수정하기는 힘드네요.

1개의 좋아요