2010-04-05 20 views
0

Je tente d'obtenir des données de classe associées à un ImageButton cliqué de la souris; ImageButton est situé dans un WrapPanel enveloppé par Scollviewer et rempli de nombreux autres ImageButtons. Le problème est que même si je peux voir l'instance de ImageButton sélectionnée "((PlanetClass) (fe))", et avoir la visibilité des données sous-jacentes de l'instance de classe "((PlanetClass) (fe)). pour accéder aux données de terrain de la classe. L'exemple ci-dessous illustre mon intention. Est-ce que j'aborde ce problème correctement (WrapPanel (enveloppé dans ScrollViewer) -> ImageButton -> FrameworkElement -> Instance du bouton -> Field Data)? Sinon, quel serait le meilleur moyen d'accéder à l'instance ImageButton et aux données associées à l'instance? Est-ce que quelqu'un pourrait me diriger dans la bonne direction?Visibilité des données de champ Classe de ImageButton cliqué avec la souris situé dans WrapPanel

// WPF EventHandler at the container level: 
<ScrollViewer ButtonBase.Click="SolarSystem_Click"> 

// Handles the ImageButton mouseClick event within the ScrollViewer wrapping the WrapPanel. 
private void SolarSystem_Click(Object sender, RoutedEventArgs e) 
{ 
    FrameworkElement fe = e.OriginalSource as FrameworkElement; 
    SelectedPlanet PlanetSelected = new SelectedPlanet(fe); 
    MessageBox.Show(PlanetSelected.PlanetName); 
} 

// Used to initiate instance of ImageButton to access field data. 
public SelectedPlanet(FrameworkElement fe) 
{ 
    return ((PlanetClass)(fe)); 
} 

// Class Data 
public class PlanetClass 
{ 
    string planetName; 

    public PlanetClass(string planetName) 
    { 
     PlanetName = planetName; 
    } 

    public string PlanetName 
    { 
     set { planetName = value; } 
     get { return planetName; } 
    } 
} 

Répondre

0

DEUX JOURS PLUS TARD et beaucoup de frustration:

Après avoir gratté la tête pendant deux jours sur cette question, je compris que, pour obtenir les données sous-jacentes au-dessous d'une souris cliquée ImageButton J'avais besoin de renvoyer le FrameworkElement e.OriginalSource au ImageButton original pour arriver à son ".source", et ensuite le résultat à PlanetClass pour arriver à ses propriétés.

// WPF EventHandler placed at the container level. 
<ScrollViewer ButtonBase.Click="SolarSystemButton_Click"> 

// Handles the ImageButton mouseClick event within the ScrollViewer wrapping the WrapPanel. 
private void SolarSystemButton_Click(Object sender, RoutedEventArgs e) 
    { 
     FrameworkElement fe = e.OriginalSource as FrameworkElement; 
     string PlanetName = ((PlanetClass)((ImageButton)fe).Content).PlanetName; 
     return PlanetName; 
    } 

Bill