2013-10-26 6 views
2

InkCanvas 클래스를 상속하는 클래스가 있습니다. 영상이 내 컬렉션 시각적 객체이며, Visual 속성은 DrawingVisual 객체를 반환사용자 정의 InkCanvas에서 선 및 드로잉 비헤이비어 그리기

Visual GetVisualChild(int index) 
{ 
    if (index == 0) 
    { 
     return InkCanvas.GetVisualChild(index); 
    } 

    return visuals[index - 1].Visual; 
} 


int VisualChildrenCount 
{ 
    get { return visuals.Count + InkCanvas.VisualChildrenCount; } 
} 

: 나는 VisualChildrenCount 속성과 GetVisualChild 방법을 재정의 (override)됩니다. 나는 새로운 Stroke (마우스의 무료 도면)을 그릴 때 스트로크가 추가됩니다 : 문제는 다음과 같다

void AddVisual(MyVisual visual) 
{ 
    if (visual == null) 
     throw new ArgumentNullException("visual"); 

    visuals.Add(visual); 
    AddVisualChild(visual->Visual); 
    AddLogicalChild(visual->Visual); 
} 

: 나는 추가하고 표시 할 DrawingVisual 객체 (성능상의 이유로)를이 클래스를 사용 InkCancas하지만 이전 DrawingVisual (Z- 주문)에서 따라서 예를 들어 큰 사각형 아래에 획을 그릴 경우 획이 숨겨져 있기 때문에 아무것도 볼 수 없습니다.

이 부적절한 문제를 어떻게 해결할 수 있습니까?

답변

1

설정 InkCanvas 'BackgroundTransparent (또는 null)에 대한 속성과 GetVisualChild를 재정의 재정에서 다른 순서로 영상을 반환 :

protected override Visual GetVisualChild(int index) 
{ 
    if (index < visuals.Count) 
    { 
     return visuals[index].Visual; 
    } 

    return base.GetVisualChild(index - visuals.Count); 
}