WPF - UserControl继承

Ber*_*ial 5 wpf inheritance user-controls wpf-controls

我在WPF中的控件继承有问题.我创建了一个名为BaseUserControl的UserControl.我希望此控件成为其他WPF userControl的基本控件.所以我写了另一个名为FirstComponent的UserControl.在下一步中,我更改了此代码

FirstComponent : UserControl
Run Code Online (Sandbox Code Playgroud)

对此

FirstComponent : BaseControl
Run Code Online (Sandbox Code Playgroud)

但是在编译期间我遇到了这个错误

Partial declarations of 'controlinheritance.componenets.FirstComponent' must not specify different base classes 
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能使FirstComponent从BaseControl派生?

编辑感谢abhishek回答我设法继承控件.我有另一个问题.在基类中我指定了一个属性public Grid _MainGrid {get; 组; }.现在我想在我的派生类中创建一个这个网格的实例.所以我使用了这个代码Howerver我得到一个错误属性'_MainGrid'没有值.8号线位置36.

abh*_*hek 5

你看到我的完整文章了吗?

http://www.dotnetfunda.com/articles/article832-define-base-class-for-window--usercontrol-.aspx

我希望这会对你有所帮助.

如果您尝试执行该项目,肯定会给您带来错误.这是因为,每个WPF窗口都是从baseWindow布局而不是当前的Window布局创建的.换句话说,如果你看到XAML,你会看到根标签是Window,它只是当前窗口的父类.

因此,为了确保一切正常,我们需要更改根元素.

所以它看起来像:

<local:BaseWindow Class="BaseWindowSample.Window1" 
                  Name="winImp" 
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                  x="http://schemas.microsoft.com/winfx/2006/xaml" 
                  xmlns:local="clr-namespace:BaseWindowSample" 
                  Title="Window1">
...
</local:BaseWindow>
Run Code Online (Sandbox Code Playgroud)

如果你仔细看到这一点,你可以看到我已经为我的项目添加了一个命名空间并将其命名为local.所以BaseWindow应该来自BaseWindow,因此它就像本地:BaseWindow