Visibilité des données champ Classe de souris cliquée ImageButton situés dans WrapPanel
-
24-09-2019 - |
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; }
}
}
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