해결되었습니다.
WindowResizer.cs가 윈도우 리사이징 및 마우스 포인트 등등을 긁어오는데
MinHeight, MinWidth에 대한 값을 긁어오는 부분이 없었습니다.
사진과 같이 최소 크기를 각각 400으로 설정했습니다.
디자이너에서 마우스로 아무리 땡겨봐도 400이하로 줄어들진 않습니다만…
디버깅 후 점이 되어 안보일정도로 윈도우창이 줄여집니다.
윈도우 최소크기 설정은 잘되던 것이 어느 순간부터 안됩니다…
반대로 최대크기 설정은 잘먹힘니다.
저장소 : [깃허브]
2개의 좋아요
루나시아
4월 11, 2022, 6:35오전
2
WindowResizer에서 윈도우 크기를 핸들링하면서 최소 크기 설정이 무시되는 듯합니다. ViewModel에서 WindowResizer를 제외하거나 해당 클래스 안에 ptMinTrackSize를 받아오는 부분을 추가해 보시기 바랍니다.
6개의 좋아요
코드를 확인해보니
WindowResizer 쪽 에서 윈도우 메세지 처리를 하는 것 같은데
0x0024 메세제에서
최소 사이즈, 최대 사이즈 무시처리 됩니다.
handled = true 부분 입니다.
※ 투머치인데 ViewModel에 View자체를 넘겨 처리하는 행위는 MVVM패턴 위반 이며,
INotifyPropertyChanged 미구현 속성은 메모리 누수 대상 입니다.
7개의 좋아요
루나시아
4월 11, 2022, 6:43오전
4
※ 투머치인데 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개의 좋아요