Visibilité des données champ Classe de souris cliquée ImageButton situés dans WrapPanel

StackOverflow https://stackoverflow.com/questions/2579311

Question

Je cherche à obtenir des données de classe associée à un ImageButton de souris cliqué; qui ImageButton est situé dans un Scollviewer enveloppé WrapPanel et rempli de nombreuses autres ImageButtons. Le problème est que bien que je puisse voir l'exemple de l'ImageButton sélectionné « ((PlanetClass) (fe)) », et avoir une visibilité des données de l'instance de classe sous-jacente « ((PlanetClass) (fe)). Contenu », je ne peux pas d'accéder à des données sur le terrain de la classe. L'exemple ci-dessous illustre mon intention.

Suis-je approchais correctement ce problème (WrapPanel (enveloppé dans ScrollViewer) -> ImageButton-> FrameworkElement -> instance du bouton -> Champ de données)? Sinon, quelle est la meilleure façon serait d'accéder à l'instance ImageButton et les données associées de l'instance? Quelqu'un peut-il s'il vous plaît me diriger dans la bonne direction?

// 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; } 
    } 
} 
Était-ce utile?

La solution


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, sous un ImageButton de la souris cliqué je devais jeter le FrameworkElement e.OriginalSource Retour à la ImageButton d'origine pour y accéder est » .source », puis jeter le résultat à PlanetClass pour se rendre à 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top