2009-06-29 13 views
12

System.Windows.Window OnRender 메서드를 재정의 할 때 화면에 그려지지 않을 때 나타났습니다. 좋은 이유가 있지만 설명을 찾을 수 없었습니다.WPF Window.OnRender 메서드를 재정의하는 것이 화면에 그려지지 않는 이유는 무엇입니까?

다음 코드를이 보여

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 

namespace WpfApplication1 
{ 
    public partial class Window1 : Window 
    { 
     Pen pen = new Pen(); 

     public Window1() 
     { 
      InitializeComponent(); 
      pen.Brush = Brushes.Black; 
     } 

     protected override void OnRender(DrawingContext dc) 
     { 
      base.OnRender(dc); 
      dc.DrawRectangle(Brushes.Black, pen, new Rect(0, 0, 600, 400)); 
      dc.DrawEllipse(Brushes.Green, pen, new Point(300, 300), 50, 50); 
     } 
    } 
} 

은 (다음, 윈도우의 컨텐츠로서 설정 소자)를 FrameworkElement에서 도면 로직 교체 잘 작동한다.

덕분에,

대니 단지 수표로

답변

14

대답은 Chales Petzold에 here에 의해 주어진다.

그의 대답은 '이유를 모르겠다'이지만, 설명문은 창 배경을 투명하게 설정하면 버그를 수정한다는 것을 올바르게 암시합니다.

+0

"이유를 모르겠다"는 질문에 실제로 대답하지 않으며이 수정은 MVVM을 사용하는 ItemsControl 파생 제품에서 작동하지 않습니다. – user3690202

1

제가 생각하기에는 그리드가이 문제를 생성합니다. 기본적으로 일치 함 창에 격자 요소가 포함되어 있습니다.

4

실제로 창은 그 자체를 칠합니다. 그 중에서도 배경을 나타내는 사각형이 있습니다. OnRender에 추가 된 것은 배경에 있습니다. 배경을 투명하게 만들고 뒤의 배경을 볼 수 있습니다.

최소한 Button과 OnRender를 사용할 때 알아 냈습니다. 단추 내에서만 그리면 버튼이 그려져 있기 때문에 아무 것도 볼 수 없습니다. 그러나 도면이 버튼 경계를 넘어 확장되면 외부의 모든 것을 볼 수 있습니다.

enter image description here

은 여기에 빈 단추 노란색 배경 위에 그려집니다. OnRender에서는 십자가를 그리는 검은 색 선 두 개를 그립니다. 버튼 밖에있는 선 부분 만 볼 수 있습니다.

OnRender의 매우 이상한 동작입니다.

관련 문제