2010-03-31 3 views
1
public class VisualCue : FrameworkElement 
{ 
    public List<Indicator> Indicators { get; set; } 

    public VisualCue() 
    { 
     this.Indicators = new List<Indicator>(); 
    } 

    protected override int VisualChildrenCount 
    { 
     get { return this.Indicators.Count; } 
    } 

    protected override Visual GetVisualChild(int index) 
    { 
     return this.Indicators[index]; 
    } 
} 

public class Indicator : FrameworkElement 
{ 
    protected override void OnRender(DrawingContext context) 
    { 
     context.DrawEllipse(Brushes.Red, 
      new Pen(Brushes.Black, 2), new Point(0, 0), 10, 10); 

     base.OnRender(context); 
    } 
} 

Et en XAML:Dessin d'un FrameworkElement dans une autre FrameworkElement

<local:VisualCue x:Name="visualCue"> 
<local:VisualCue.Indicators> 
    <local:Indicator /> 
</local:VisualCue.Indicators> 
</local:VisualCue> 

Mais l'indicateur ne soit pas tiré. Qu'est-ce que je rate?

Répondre

0

vous devez passer outre ArrangeOverride en VisualCue À tout le moins:

protected override Size ArrangeOverride(Size finalSize) 
{ 
    foreach (Indicator indicator in Indicators) 
    { 
     indicator.Arrange(new Rect(0, 0, 10, 10)); 
    } 

    return finalSize; 
} 

Les valeurs du Rect transmis aux enfants des indicateurs dépend de vos besoins de mise en page. Vous devez également outrepasser MeasureOverride.

FrameworkElement.ArrangeOverride method

FrameworkElement.MeasureOverride method

+0

Yep vaut la peine de vérifier les détails de rendu dans wpf comme la mesure et organiser les étapes comme scott dit .. http://msdn.microsoft.com/en-us/library/ms745058.aspx – Charleh

1

Avez-vous essayé la mise en œuvre de la méthode LogicalChildren?

protected override IEnumerator LogicalChildren 
{ 
    get { return indicators.GetEnumerator(); } 
} 

J'ai eu toutes sortes de problèmes quand j'ai développé mon premier 'FrameworkElement`. Après des recherches approfondies, j'ai découvert qu'il y avait un certain nombre de méthodes ont à remplacer pour qu'il puisse bien jouer avec WPF.

Questions connexes