0

マウスでクリックした ImageButton に関連付けられたクラス データを取得しようとしています。この ImageButton は、Scollviewer でラップされた WrapPanel 内にあり、他の多数の ImageButton で満たされています。問題は、「((PlanetClass)(fe))」が選択された ImageButton のインスタンスが表示され、クラス インスタンスの基になるデータ「((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; } 
    } 
} 
4

1 に答える 1

0

2日後、そして多くの欲求不満:

この問題について 2 日間頭を悩ませた後、マウスでクリックした 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;
     }

明細書

于 2010-04-06T19:29:03.397 に答える