2011-03-24 3 views
1

en essayant de résoudre le problème suivant:WPF StackPanel a perdu son enfant

J'ai un StackPanel qui contient une Image en tant que. Mais si je fais panel.Children.Count il retourne parfois 0 et parfois 1. Pourquoi? Comment puis-je réparer cela? Remarque: j'obtiens le StackPanel de l'objet expéditeur d'un MouseEvent.

Est-ce que quelqu'un a une idée de comment résoudre mon problème? Toute aide est appréciée :)

Mise à jour:

private void MoveContainer(object sender, MouseEventArgs e) 
{ 
    StackPanel panel = sender as StackPanel; 

    MessageBox.Show(panel.Children.Count.ToString()); 
} 

Mise à jour 2:

<StackPanel Name="a1" AllowDrop="True" 
        PreviewMouseLeftButtonDown="StartDrag" 
        PreviewMouseMove="MoveContainer" 
        Visibility="Visible" 
        Background="Transparent"> 
      <Image Source="testcontainer.png" Width="60" Height="30"></Image> 
</StackPanel> 

Mise à jour 3:

private void StartDrag(object sender, MouseEventArgs e) 
{ 

    startPos=e.GetPosition(null); //startPos is a local attribute 
} 
+3

@flop - postez votre code – dugas

+0

@thedugas a mis à jour le code en post :) – flop

+0

Pouvez-vous poster un peu de votre Xaml, je ne peux pas recréer ce problème. Il semble que ce soit un problème de routage d'événement, la variable de panneau est-elle toujours correctement convertie? – benPearce

Répondre

2

J'ai testé le code et il retourne toujours 1 pour moi , il y a trop peu d'informations pour savoir ce qui ne va pas de votre côté.

Dans combien d'endroits modifiez-vous le StackPanel?
Ce gestionnaire d'événements est-il utilisé par d'autres StackPanels qui n'ont pas d'enfants?
Utilisez-vous des ControlTemplates étranges qui provoquent des StackPanels imbriqués?

+0

i modifier le panneau juste dans cette méthode et dans une autre, mais je ne pense pas que l'autre est le prob.Oui, j'utilise le même gestionnaire pour tous mes panneaux de pile (certains d'entre eux ont un enfant d'autres pas) – flop

+0

Si vous utilisez le même gestionnaire pour les autres StackPanels, comment pouvez-vous être sûr que vous avez toujours touché celui qui a réellement un enfant? Vous devriez essayer et utiliser uniquement le gestionnaire pour ce StackPanel unique et voir si vous obtenir 0 parfois –

+0

mais l'objet expéditeur ne devrait pas renvoyer le panneau qui a déclenché l'événement? mais merci quand même, je vais l'essayer avec des gestionnaires différents. :) – flop