안녕하세요. WPF 신입 프로그래머입니다!
버튼을 새롭게 만들고 이벤트를 추가하여 버튼 클릭 시, 특정 조건에 따라 윈도우가 종료되거나 종료되지 않는 기능을 구현하였습니다.
하지만, 윈도우 타이틀 바에 있는 X종료 버튼을 누르면 따로 기능을 구현해 주지 않아도 종료가 되는데, 이 기능을 없애고 제가 원하는 버튼으로 기능을 다시금 만들 수 있는 방법이 있을까요?
타이틀 바 종료 버튼을 누르면, 바로 종료되는 것이 아니라
특정 조건에 따라 종료 되거나, 종료가 취소되는 기능을 구현하고 싶습니다.
(위에서 새롭게 만들었다고 하는 버튼의 기능과 일치합니다.)
타이틀 바를 없애고, 직접 만드는 방법 밖에 없는걸까요?
*MVVM 패턴을 이용한 ViewModel에서 기능을 구현하고 있습니다.
감사합니다.
윈도우의 [닫기] 버튼으로 종료될때 종료를 취소하는 방법은 단순하게
OnClosing 이벤트에서 e.Cancel = true 처리를 하면 될거 같습니다.
private void OnClosing(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
그런데 mvvm 구조에서 뷰모델에서 처리한다고 하셨으니
뷰모델에서 처리를 원하신다면 비헤이비어를 구현해서 처리할 수 있긴 합니다만 저정도 순수한 뷰 관련 이벤트 핸들러는 코드비하인드로 처리해도 mvvm 위배는 아닙니다.
(코드 내부에서 모델을 직접 참조한다던가 비즈니스 로직이 포함되지 않는다면 말이죠)
그런데 윈도우 크롬을 제거해서 커스텀하게 처리하시는것이 좋아보입니다.
허규
4
답변 감사합니다ㅎㅎ
e.Cancel = true 처리할 시, close 버튼으로 윈도우를 종료할 수 없게 되는데 이건 어쩔 수 없는 부분인가요?
커스텀 타이틀 바를 만드는 것도, 사실 창 닫기 버튼만 기능 수정하면 되는 것이라서… 다른 것도 다 만들기에는 좀 부담이더라구요…
감사합니다!
이게 문의 하셨던 요구사항 아니었나요 ?
원하는 특정 조건시 “종료가 취소되도록” 하고 싶다면
e.Cancel = true;
그외는 그냥 종료 즉,
private void OnClosing(object sender, CancelEventArgs e)
{
if(종료 취소 조건) {
e.Cancel = true;
}
// 윈도우 close
}
단순하게 요런식으로 하면 되는게 아닌가 하는 생각이었습니다.
1개의 좋아요
허규
7
아 제가 착각했습니다…ㅎㅎ
말씀하신 내용이 맞습니다…! 감사합니다!!