이번 v0.15.0 릴리즈에서는 Calendar/DatePicker 및 PasswordBox 컨트롤 추가, 네이티브 프레임을 지원하는 커스텀 윈도우 크롬, 크로스 플랫폼 윈도우 상태 관리, 가상화 WrapItemsPresenter, 그리고 스타일·속성 값·Grid 레이아웃 시스템의 대규모 리팩터링이 이루어졌습니다.
호환성이 깨지는 변경 사항
StyleScope 제거, StyleSheet 기반 스타일 해석으로 통합. Application.StyleSheet을 글로벌 폴백으로 사용
PresenterMode 열거형 제거, 프레젠터 확장 메서드를 직접 사용 (예: .StackPresenter(), .WrapPresenter(itemWidth, itemHeight), .FixedHeightPresenter(), .VariableHeightPresenter())
추가됨
Calendar 및 DatePicker 컨트롤. 키보드/마우스 내비게이션, 월/년/10년 단위 선택 지원
보안 마스크 텍스트 입력을 위한 PasswordBox 컨트롤
참고:Password 속성은 평문 문자열로 저장됩니다. 사용 후 직접 클리어하세요 (예: passwordBox.Password = string.Empty;).
크로스 플랫폼 윈도우 상태 지원: Win32, macOS, X11에서 최소화, 최대화, 복원, 최상위, 작업 표시줄 제어
네이티브 크롬을 활용한 커스텀 타이틀 바 — 클라이언트 영역을 타이틀 바로 확장하면서 OS 기능(둥근 모서리, 시스템 버튼) 유지 (#81)
대규모 아이템 컬렉션을 효율적으로 렌더링하는 가상화 WrapItemsPresenter (#94)
MewProperty에 속성 값 강제(coercion) 지원 추가
MewObject 간 타입 변환 속성-속성 바인딩
공통 네임드 버튼 스타일을 위한 BuiltInStyles 및 StyleSheet 플루언트 정의 API
텍스트 에디터에서 더블 클릭 단어 선택
TextBase에 MaxLength 속성 추가
취소 가능한 윈도우 닫기를 위한 OnClosing 확장 메서드
MenuBar에 DrawBottomSeparator 속성
KeyBinding 생성자에 canExecute 옵션 파라미터
Grid에 ShowGridLine 속성 추가 (시각적 디버깅용)
개선됨
Grid 레이아웃 리팩터링: Auto/Pixel/Star 크기 조정 및 span 처리 개선 (#89)
스타일 해석 및 트리거 애니메이션 로직 리팩터링으로 올바른 속성 소스 추적 및 우선순위 처리
Border 렌더링을 배경과 테두리로 분리하여 정확성 향상
테마 및 DPI 알림을 Control뿐만 아니라 모든 FrameworkElement로 확대 (#90)
Domenic Denicola의 글은 Windows 네이티브 앱 개발 환경이 지나치게 복잡하고 단절적이라고 비판합니다. 글에서는 Display Blackout이라는 작은 유틸리티를 예로 들며, 모니터 열거, 비활성 검은 오버레이 창, 글로벌 단축키, 시작 프로그램 등록, 설정 저장, 트레이 아이콘 같은 비교적 단순한 기능조차 최신 Windows App SDK/WinUI 3만으로는 매끄럽게 해결되지 않고, 상당 부분이 여전히 Win32 P/Invoke에 의존한다고 지적합니다. 또한 .NET 10은 기본 탑재되지 않아 framework-dependent 배포의 사용자 경험이 좋지 않고, NativeAOT를 써도 결과물이 작지 않으며, MSIX와 코드 서명 비용 문제도 배포 장벽으로 작용한다고 설명합니다.
DisplayBlackout.MewUI
필요할 때 선택한 디스플레이를 검게 가릴 수 있는 Windows 시스템 트레이 유틸리티입니다. 게임 중 주의 분산을 줄이거나, 하나의 모니터에만 집중하거나, 화상 통화 중 보조 디스플레이를 어둡게 하는 용도에 유용합니다.
원본 프로젝트의 README는 작은 네이티브 Windows 유틸리티를 배포할 때의 현실적인 문제들, 즉 런타임 번들링과 Native AOT 이후에도 남는 외부 런타임 의존성에 대한 우려를 제기합니다. 이 포트는 그와 같은 질문들에 대해 MewUI가 어떤 답을 제시할 수 있는지를 살펴보기 위한 시도입니다.
이 프로젝트는 MewUI 프레임워크 검증을 위한 실험적 포트입니다. 원본 프로젝트를 대체할 목적은 아닙니다.
선택적 블랙아웃: 시각적 모니터 선택기를 통해 검게 가릴 디스플레이를 선택할 수 있습니다.
조절 가능한 불투명도: 블랙아웃 오버레이의 어두운 정도를 조절할 수 있습니다.
클릭 스루 모드: 블랙아웃을 해제하지 않고도 검게 가려진 디스플레이와 상호작용할 수 있습니다.
전역 단축키: Win+Shift+B로 블랙아웃을 전환할 수 있습니다.
시스템 트레이 통합: 알림 영역에서 빠르게 접근할 수 있습니다.
테마 및 강조색 사용자 지정: 라이트/다크/시스템 테마와 여러 강조색을 지원합니다.
요구 사항
.NET 10 SDK
Windows 7 이상
개인정보 및 보안
이 앱은 관리자 권한 상승이 필요하지 않으며, 네트워크 요청을 보내지 않고, 텔레메트리나 사용자 데이터를 수집하지 않습니다. 설정은 %LocalAppData%/DisplayBlackout/ 아래의 JSON 파일에 로컬로 저장됩니다.
왜 MewUI인가?
원본 작성자는 WinUI 3가 Native AOT를 지원하며, 이를 통해 .NET 런타임을 바이너리에 포함할 수 있다고 언급했습니다. 그러나 WinAppSDK 런타임 자체는 여전히 사용자 시스템에 별도로 설치되어 있어야 합니다. 즉, 반쪽짜리 Native AOT인것이죠.
MewUI는 WinAppSDK 의존성과 외부 런타임 요구사항 없이 배포 및 구동 가능합니다.