使用WPF窗口的通用基类

时间:2015-11-30 19:43:08

标签: c# wpf generics

为什么:

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派生。 它给我的错误如下:

  

基础类&#39;解决方案的名称&#39;与其他部分的声明不同。

当我看到所谓的其他部分时,它是以下内容:

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

这是在AnglesteelWindow.g.i.cs文件中进行的。如果我从那里删除它就没有任何区别。

2 个答案:

答案 0 :(得分:2)

添加@MichaelMairegger答案,您可以通过创建另一个继承自泛型类的非泛型类来达到目标​​:

public abstract class WindowControlsOfAngleSteel : WindowControls<AngleSteel>
{

}

让你的窗口类继承它:

来自XAML:

<ns:WindowControlsOfAngleSteel >

</ns:WindowControlsOfAngleSteel >

nsWindowControlsOfAngleSteel存在的名称空间。

在代码中(可选):

public partial class AnglesteelWindow : WindowControlsOfAngleSteel
{

}

答案 1 :(得分:1)

您无法更改继承树。 AnglesteelWindow是部分的,因为它也在AnglesteelWindow.xaml中声明,其中根元素是Window。如果你想从另一个类继承,你必须在你的基类替换Window根。

public class MyDerivedBaseWindow : Window {}



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

但是你不能在XAML中使用Generic类。您必须更改逻辑,即要用作window-root的基本窗口类是非泛型的。