2015-11-30 181 views
1

使用通用基礎類,爲什麼是這樣的:爲WPF窗口

public abstract class WindowControls<T> : Window 

不可能的。我似乎無法弄清楚。

public partial class AnglesteelWindow : WindowControls<AngleSteel> { 
    private UCListView uc; 
    public AnglesteelWindow() { 

     InitializeComponent(); 
     uc = new UCListView(); 
     uc.SubmitClick += new EventHandler(ButtonPressed); 
     this.uc.grid.PreviewMouseLeftButtonUp += 
      new System.Windows.Input.MouseButtonEventHandler(
       this.MousePressed14<AngleSteel>); 
     stkTest.Children.Add(uc); 
     uc.amountLabel.Content = "Milimeter"; 
     uc.grid.ItemsSource = DatabaseLogic.MaterialTable("Anglesteel").DefaultView; 
     base.Material(uc, "Anglesteel"); 
    } 
} 

我知道泛型是如何工作的,但不知道爲什麼它是不可能讓我AnglesteelWindow從WindowControls派生。 它給我的錯誤如下:

'解決方案的名稱'的基類與其他部分聲明的不同。

當我在看所謂的另一部分是以下幾點:

public partial class AnglesteelWindow : 
      WindowControls<AngleSteel> System.Windows.Markup.IComponentConnector { 

這在AnglesteelWindow.g.i.cs文件進行。如果我從那裏刪除它,它沒有任何區別。

+0

這是否窗口有一個XAML文件? –

+0

問題不在於你的C#代碼,而在於它與XAML文件不兼容。 –

回答

2

添加上@MichaelMairegger的回答,您可以通過創建從通用類這樣繼承另一個非通用類達到你的目標

從XAML:

<ns:WindowControlsOfAngleSteel > 

</ns:WindowControlsOfAngleSteel > 

哪裏ns就是WindowControlsOfAngleSteel存在的命名空間。

在代碼(可選):

public partial class AnglesteelWindow : WindowControlsOfAngleSteel 
{ 

} 
+0

如果您刪除基類中的'abstract',那麼答案是正確的。 –

+0

@MichaelMairegger,你爲什麼認爲'abstract'需要被刪除?我實際測試了這個代碼。 –

+0

對不起,我的錯誤是,我認爲將一個抽象類定義爲根會導致錯誤。從未嘗試過。 –

1

您無法更改繼承樹。 AnglesteelWindow部分是因爲它也在AnglesteelWindow.xaml中聲明,其中根元素是Window。如果你想從另一個類繼承,你必須在你的基類中替換Window根。

public class MyDerivedBaseWindow : Window {} 



<ns:MyDerivedBaseWindow > 
    <!-- WindowContent--> 
</ns:MyDerivedBaseWindow > 

但是,您不能在XAML中使用Generic類。你必須改變你的邏輯,即你想用作window-root的基本窗口類是非泛型的。

public abstract class WindowControlsOfAngleSteel : WindowControls<AngleSteel> 
{ 

} 

從像這樣,讓你的窗口類繼承: