2008-09-23 6 views
2

후속 작업으로 my previous question까지 투명 창이 올바르게 사용되는 지 궁금합니다. 투명도를 사용하도록 내 창을 설정하면 UI가 응답하지 않는 것처럼 보입니다. 실제로 일어나고있는 것은 UI가 간단히 업데이트되지 않는다는 것입니다. 애니메이션이 발생하지 않고 페이지가 탐색하는 것처럼 보이지 않습니다. 그러나 디버거가 버튼, 링크 등을 클릭하는 것을 보는 경우 실제로 작동합니다. 창 최소화 및 복원은 UI를 "다시 잡아"사용자가 다시 작동 할 때까지 작업을 계속할 수 있습니다.WPF 투명 테두리로 인해 UI 다시 그리기가 중단됩니다.

투명 테두리를 제거하면 문제가 발생하지 않습니다. 내가 틀린 일을하고 있거나 투명 테두리를 제대로 사용하기 위해 구현해야하는 다른 설정, 코드 등이 있습니까?

다음은 실패한 코드에 대한 내 창 선언입니다.

<Window x:Class="MyProject.MainContainer" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="WPF APplication" Height="600" Width="800"  
    xmlns:egc="ControlLibrary" Background="{x:Null}" 
    BorderThickness="0" 
    AllowsTransparency="True" 
    MinHeight="300" MinWidth="400" WindowStyle="None" > 

및 Windows XP SP2에서 동작

<Window x:Class="MyProject.MainContainer" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="WPF Application" Height="600" Width="800"  
    xmlns:egc="ControlLibrary" Background="{x:Null}" 
    BorderThickness="0" 
    AllowsTransparency="False" 
    MinHeight="300" MinWidth="400" WindowStyle="None" > 

답변

1

나는 마침내 해결 방법을 발견했다고 생각합니다. 내가 읽은 모든 것에서이 문제는 XP SP3 & .NET 3.5 SP1에서 발생하지 않아야합니다.

예를 들어 this blog post에서 Win32 API 함수를 사용하여 불규칙한 모양의 창을 만드는 방법을 보여줍니다.이 기술을 사용하기 위해 주 창을 다시 만든 후에는 예상대로 작동하는 것처럼 보입니다. 동작이 반환되지 않았습니다.

저자가이 방법을 권장하는 이유는 WPF 및 투명 창 성능 문제로 인한 것입니다. .NET 3.5 SP1에서 더 좋을 수도 있지만 구현하기가 어렵지 않고 더 잘 수행되어야합니다.

+0

내가 링크 된 블로그 기사에 따르면, 이것은 Vista에서 문제를 일으킬 수있다. 당신이 그것을지지 할 필요가 없다면, 좋을 것입니다. 그렇게한다면, 너무 멀리 가기 전에 Vista에서 테스트 해보십시오 :) –

2

당신이 .NET 3.0 또는 .NET 3.5을 사용하고 발생하지 않습니다 코드? 그렇다면 XP의 .NET 3.5 및 SP3에서 수정 된 투명 윈도우 API의 알려진 문제입니다 (Vista의 SP1도 마찬가지입니다). 기본적으로 AllowsTransparency를 True로 설정하면 WPF 파이프 라인이 소프트웨어 전용 모드로 렌더링되어야합니다. 이로 인해 대부분의 시스템에서 성능이 크게 저하됩니다.

불행히도이 문제를 해결하려면 .NET 3.0 SP1 (.NET 3.5에 포함)로 업그레이드하고 Windows 용 서비스 팩을 설치해야합니다. 투명 창은 여전히 ​​느리지 만 거의 나쁘지는 않습니다. 좀 더 깊이있는 토론 here을 찾을 수 있습니다.

0

저는 Windows XP Pro SP3 및 .NET 3.5 SP1을 사용하고 있습니다. 또한이 프로젝트가 프레임 워크 3.5 버전을 대상으로하고 있음을 확인했습니다.

+0

블로그 게시물에는 일부 비디오 카드 드라이버가 시스템 메모리를 통해 비트 맵 복사본을 작성했다고 명시되어 있습니다. ivers가 도움이 될 것입니다. –

+0

두 번 선택했는데 비디오 드라이버가 최신 버전으로 업데이트되었습니다. 나는 이것이 테스트 된 모든 워크 스테이션 (약 10 개)에서 일어났다 고 언급 했어야했다. – palehorse

관련 문제