2011-01-27 2 views
7

비 클라이언트 영역 (테두리, 제목 표시 줄, 닫기/최소화/최대화 단추)을 잃지 않고 WPF 창을 투명하게 만들 수있는 방법이 있습니까?WPF 창 투명도 (비 클라이언트 영역 포함)

'AllowsTransparency'를 'true'로 설정하면 클라이언트가 아닌 영역을 제거하는 'WindowStyle'을 'None'(this answer에서 설명)으로 설정해야합니다.

WPF 개발자 중 하나 인 blogged about how transparent windows work in WPF, 그리고 비 클라이언트 영역 투명성을위한 지원을 구현하는 것이 왜 어려웠 을까요?

투명도가 높은 WPF 창에는 클라이언트 스타일이 아닌 클라이언트 스타일이 표시 될 수 있습니다. 이것은 사용자 정의 창 모양을 만들려는 의도가 많은 시나리오에서 좋지만 일반 창을 "페이드 인"하려는 사람들에게는 성가신 일입니다.

WPF 전용 솔루션은 문제가되지 않는 것으로 보입니다.

네이티브 SetLayeredWindowAttributes function을 호출하고 WPF 창 핸들과 LWA_ALPHA를 전달하면 예상대로 효과가 없습니다.

내가 생각할 수있는 유일한 다른 방법은 Win32 (또는 WinForms) 창에서 WPF 콘텐츠를 호스팅하는 것입니다. 나는 이것을 시도하는 것이 airspace issues이 될 것이라고 의심합니다.

WPF 계층 창 WPF 렌더링하는 하드웨어 가속 특히 때, 사용자가 요청한 정확한 색상을 렌더링하기 위해 보장 할 수 없기 때문에 ... WPF는, 투명 컬러 키를 지원하지 않는 다른 운영 체제에 다른 기능을 가지고있다.

위 내용을 올바르게 읽는 지 확실하지 않지만 투명성이있는 WPF 콘텐츠를 호스팅하려고하는 것처럼 들립니다.

아이디어가 있으십니까?

Transparent Notepad2 Window

답변

1

당신은 WPF Chrome라는 MS에서 라이브러리를 사용하여 비 클라이언트 영역을 사용자 정의 할 수 있습니다. 이 기사를 확인하십시오 : 'Custom Window Chrome'.

이 라이브러리를 사용하면 크롬을 투명하게 만들고 더 많은 것들을 변경할 수 있습니다.

+0

이 라이브러리는 표준 윈도우 크롬을 투명하게 만드는 메커니즘을 제공하지 않는다고 생각합니다. 비 클라이언트 영역에 대한 책임을 피하고 DWM에 맡기고 싶습니다. – Quppa

2

Fluidkit에는 유리창이 삽입되어 있습니다.

+0

감사합니다. FluidKit GlassWindow 구현은 꽤 좋아 보이는 데 비 클라이언트 영역이 제거/대체되면서 창 불투명도를 설정할 수 있습니다. 그러나, 나는 내 자신의 비 클라이언트 영역을 그릴 필요가없는 솔루션을 찾고 있습니다. – Quppa