2013-10-26 3 views
2

У меня есть класс, который наследует класс InkCanvas. Я переопределил VisualChildrenCount свойство и метода GetVisualChild:Drawing Stroke and 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); 
} 
Смежные вопросы