bunta의 보조기억장치

[C# / WPF] Window 최상위에 Border 그림자 적용 시 버벅거리는 문제 본문

프로그래밍/C#

[C# / WPF] Window 최상위에 Border 그림자 적용 시 버벅거리는 문제

bunta 2024. 3. 13. 14:00
반응형

🤷‍♂️ 문제 발생

WPF 프로그램을 개발하는 중에 전체적으로 버벅거리는 문제가 발생하였다.

 

 

💡 문제 접근

Border 태그로 인해 성능이 저하될 수 있다는 글을 찾게 되었다.

확실히 Border 태그를 지우고 실행하니 전체적으로 버벅거림이나 속도가 올라간 것이 체감이 되었다.

 

더 자세한 내용을 검색하다보니 Effect로 인해 성능이 크게 저하될 수 있다는 글을 찾았다.

 

Points to Remember

While working, I have found both Effect and BitmapEffect of Border, even though it looks great for an application, it may often deteriorate performance of the application. So it is always better to avoid Effects. If you still like to use them, always use the effects to small elements. Do not put say BitmapEffect to a border that spans the whole window. This will seriously slow down the WPF application.

출처: https://www.codeproject.com/Articles/140616/WPF-Tutorial-Fun-with-Border-Brush

 

현재 개발 중인 프로그램에서 MainWindow에서 테두리와 그림자 효과를 주기 위해서 Border.Effect를 사용하였는데 해당 부분만 삭제하여도 문제가 해결되는 것으로 보아 위와 같은 이유로 발생한 문제라고 볼 수 있었다.

 

🔧 문제 해결

우선 그림자 효과는 성능을 위해 포기하기로 하고 다른 방법을 찾아보아야 할 것 같다.

 

Effect는 웬만하면 작은 요소에만 사용할 수 있도록 해야겠다.

 

+ 추가 2024.04.28 ---------------------------------------------------------------

 

Microsoft.Window.Shell 을 이용해서 그림자 기능을 추가할 수 있다.

 

아래 코드를 <Window></Widnow> 안에 추가하면 된다.

 

만약 Window태그에 AllowsTransparency="True"가 지정되어 있을 경우 제거해줘야 효과가 적용된다.

 

ReziseMode="None"으로 되어있을 경우 그림자 효과가 나타나지 않는다.

 

<WindowChrome.WindowChrome>
    <WindowChrome        
    ResizeBorderThickness="5"
    CaptionHeight="0" 
    CornerRadius="0" 
    GlassFrameThickness="5">
    </WindowChrome>
</WindowChrome.WindowChrome>
ResizeBorderThickenss 사용자가 클릭하여 창의 크기를 설정할 수 있는 영역을 지정
CaptionHeight 제목 표시줄 영역을 지정
즉, 창을 이동시키기 위한 끌기 동작, 더블클릭하여 창 최대화, 최소화 기능 영역 지정
CornerRadius 창 모서리의 둥근 정도를 지정
GlassFrameThickness 윈도우7의 반투명한 창 테두리(Widnows Aero) 두께를 지정하며 창에 그림자가 생김

 

반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C# / WPF] ItemsControl의 Item 중첩 생성 문제  (0) 2024.02.20
Comments