Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使WPF页面具有公共接口_C#_Wpf_Polymorphism - Fatal编程技术网

C# 如何使WPF页面具有公共接口

C# 如何使WPF页面具有公共接口,c#,wpf,polymorphism,C#,Wpf,Polymorphism,我们开发了一个类似向导的WPF应用程序,它有一个可以导航到各种页面的框架。我在单独的xaml和xaml.cs文件中定义每个页面,然后让应用程序使框架在页面之间导航 我的所有页面当前都继承自页面。我想有一个共同的界面,我所有的网页,所以我可以访问他们多态性。但是,更改页面的基类会导致编译失败,因为VisualStudio从xaml文件自动生成的文件将基类设置为页面,并且我得到一个错误,即的部分声明不能指定不同的基类 我的一个选择是添加另一个接口(例如WizardPage)并使所有类实现该接口,但这

我们开发了一个类似向导的WPF应用程序,它有一个可以导航到各种页面的框架。我在单独的xaml和xaml.cs文件中定义每个页面,然后让应用程序使框架在页面之间导航

我的所有页面当前都继承自页面。我想有一个共同的界面,我所有的网页,所以我可以访问他们多态性。但是,更改页面的基类会导致编译失败,因为VisualStudio从xaml文件自动生成的文件将基类设置为页面,并且我得到一个错误,即的部分声明不能指定不同的基类

我的一个选择是添加另一个接口(例如WizardPage)并使所有类实现该接口,但这意味着每个页面都需要实现所有的intefaces函数,这很不方便,因为我希望大多数函数,对于大多数页面,都有默认的空实现

你能推荐我可以用来解决这个问题的其他方法吗


Thasnks
splintor

制作一种适配器页面,用于扩展页面并实现WizardPage,该页面提供WizardPage方法的空实现。然后让其他页面扩展WizardPage。

您也可以将xaml的根标记设置为您定义的类。 在这里,您必须从页面派生基类,然后才能从基类派生页面类

public class MyBaseClass : Page
{
    .....
}
您可以从如下类派生页面类:

public partial class MyDeriveClass : MyBaseClass
{
    .............
}
在您的xaml中编写

<y:MyBaseClass y="add your Namesapace here" and add other attribute of Page also like default namespace and xmlns:x>
    ...............
</y:MyBaseClass>

...............

但正如我所说的,我必须让我的页面为页面继承,否则我的编译会中断,因为它与自动生成的文件中为它们定义的基类不兼容。如果从从从页面继承的类继承,我看不出它会如何中断。@splintor,看看Anurag的解决方案。您必须编辑您的xaml文件以生成正确的基类。是的,我现在了解了xaml定义需要如何更改。谢谢。这就是我要找的。我还发现了在中描述的相同问题。他链接到的帖子不可用,但我使用谷歌缓存来理解我需要做什么。谢谢。我做了这里公开的事情,它是有效的,但之后我不能做类似的事情:
List mylyst;mylist.add(myderivedItem)
它声称无法从derivedclass转换为基类。。这是常见的还是预期的??