Видимость данных поля класса для кнопки мыши, нажатой на кнопку ImageButton, расположенную в WrapPanel - PullRequest
0 голосов
/ 05 апреля 2010

Я пытаюсь получить данные класса, связанные с нажатой кнопкой мыши ImageButton; какой ImageButton находится в оболочке Scrapviewer, обернутой WrapPanel и заполненной множеством других кнопок ImageButton. Проблема заключается в том, что, хотя я могу видеть выбранный экземпляр ImageButton "((PlanetClass) (fe))" и иметь видимость базовых данных экземпляра класса "((PlanetClass) (fe)). Content", я не могу чтобы получить доступ к любым полевым данным класса. Пример ниже иллюстрирует мое намерение.

Правильно ли я подхожу к этой проблеме (WrapPanel (завернутый в ScrollViewer) -> ImageButton-> FrameworkElement -> Экземпляр кнопки -> Данные поля)? Если нет, как лучше всего получить доступ к экземпляру ImageButton и связанным с ним данным? Кто-нибудь может указать мне правильное направление?

// 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; } 
    } 
} 

1 Ответ

0 голосов
/ 06 апреля 2010

ДВЕ ДНЯ ПОЗЖЕ и много разочарований:

После того, как я почесал голову в течение двух дней по этой проблеме, я понял, что для получения базовых данных под ImageButton, по нажатию мыши, мне нужно было привести FrameworkElement e.OriginalSource обратно к исходному ImageButton, чтобы добраться до его ".source ", а затем приведите результат к PlanetClass, чтобы получить его свойства.

// 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

...