2013-10-26 10 views
2

我有一個繼承InkCanvas類的類。我重寫了VisualChildrenCount屬性和方法GetVisualChild繪圖描邊和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; } 
} 

哪裏視覺效果是我收集的視覺對象和Visual屬性返回DrawingVisual對象。 我使用這個類的添加和顯示DrawingVisual對象(性能原因):

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

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

的問題如下:當我繪製一個新Stroke(用鼠標在無圖)該行程被添加到InkCancas,但在之前的DrawingVisual(Z順序)下,因此如果我在一個大矩形下繪製筆畫,我看不到任何東西,因爲筆畫是隱藏的。

我該如何解決這個鬼祟的問題?

回答

1

設置InkCanvas' Background屬性Transparent(或null)和來自GetVisualChild倍率返回以不同的順序的視覺效果:

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

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