对WPF窗口使用泛型基类
本文关键字:泛型 基类 WPF 窗口 | 更新日期: 2023-09-27 18:25:03
为什么是
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");
}
}
我知道泛型是如何工作的,但不知道为什么不可能从WindowControls派生AnglestelWindow。它给我的错误如下:
"解决方案名称"的基类与其他部分中声明的不同。
当我看到所谓的其他部分时,它是如下所示:
public partial class AnglesteelWindow :
WindowControls<AngleSteel> System.Windows.Markup.IComponentConnector {
这是在AnglestelWindow.g.i.cs文件中创建的。如果我把它从那里移走,那就没有什么区别了。
添加@MichaelMairegger答案,您可以通过创建另一个从泛型类继承的非泛型类来实现目标,如下所示:
public abstract class WindowControlsOfAngleSteel : WindowControls<AngleSteel>
{
}
并使您的窗口类像这样从中继承:
来自XAML:
<ns:WindowControlsOfAngleSteel >
</ns:WindowControlsOfAngleSteel >
其中,ns
是存在WindowControlsOfAngleSteel
的命名空间。
代码中(可选):
public partial class AnglesteelWindow : WindowControlsOfAngleSteel
{
}
您不能更改继承树。AnglesteelWindow
是分部的,因为它也在AnglestelWindow.xaml中声明,其中根元素是Window
。如果你想从另一个类继承,你必须用基类替换Window
根。
public class MyDerivedBaseWindow : Window {}
<ns:MyDerivedBaseWindow >
<!-- WindowContent-->
</ns:MyDerivedBaseWindow >
但是不能在XAML中使用泛型类。您必须更改逻辑,即要用作窗口根的基本窗口类是非泛型的。