2017-08-28 76 views
-6

我試圖訪問公共部分類ChooseExercises訪問類窗口,但它拋出一個異常:不能從另一個類C#

System.InvalidCastException: 'Unable to cast object of type 'GymCheckList.YourProgress' to type 'GymCheckList.ChooseExercises'.' 

我想要的方式訪問它是:

namespace GymCheckList 
{ 
    /// <summary> 
    /// Interaction logic for YourProgress.xaml 
    /// </summary> 
    public partial class YourProgress : Window 
    { 
     public YourProgress() 
     { 
      InitializeComponent(); 
     } 

private void TabThursday_Loaded(object sender, RoutedEventArgs e) 
{ 
    ChooseExercises ce = (ChooseExercises)Application.Current.MainWindow; 
    var lol = ce; 
} 

如果我使用ChooseExerises CE =新ChooseExercises();它給了我空白的意義。什麼可能導致異常? 謝謝!

編輯

在ChooseExeprises類我使用了類似的代碼來訪問MainWindow類,它工作正常:

namespace GymCheckList 
{ 
    /// <summary> 
    /// Interaction logic for ChooseExercises.xaml 
    /// </summary> 
    public partial class ChooseExercises : Window 
    { 
     public ChooseExercises() 
     { 
      InitializeComponent(); 
     } 
     private List<string> data = new List<string>(); 
     public void ComboBox_Loaded(object sender, RoutedEventArgs e) 
     { 
      MainWindow kek = (MainWindow)Application.Current.MainWindow; 
+0

它們是否具有相同的命名空間?或者是導入的命名空間? –

+5

「什麼可能導致異常」 - > Application.Current.MainWindow不是ChooseExercises類型。設置一個斷點並檢查實際的類型。 –

+0

@AshkanMobayenKhiabani是的,他們有相同的命名空間.. – Alex

回答

0

顯然你的主窗口是YourProgress但你可以嘗試去的一個參考ChooseExercises窗口使用Application.Current.Windows集合:

private void TabThursday_Loaded(object sender, RoutedEventArgs e) 
{ 
    ChooseExercises ce = Application.Current.Windows.OfType<ChooseExercises>().FirstOrDefault(); 
    ... 
} 
+0

謝謝,它的工作原理! 但爲什麼我不能使用它: ChooseExercises ce =(ChooseExercises)Application.Current.MainWindow; ? – Alex

+0

因爲Application.Current.MainWindow不返回ChooseExercises窗口。如果您有其他問題,請再次閱讀我的答案並提出一個新問題。 – mm8