WPF-用户控件继承

WPF-用户控件继承,wpf,inheritance,user-controls,wpf-controls,Wpf,Inheritance,User Controls,Wpf Controls,我对WPF中的控件继承有问题。我创建了一个名为BaseUserControl的UserControl。我希望此控件成为其他WPF userControls的基本控件。所以我写了另一个名为FirstComponent的用户控件。在下一步中,我更改了这个代码 FirstComponent : UserControl 对此 FirstComponent : BaseControl 然而,在编译过程中,我得到了这个错误 Partial declarations of 'controlinherita

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

FirstComponent : UserControl
对此

FirstComponent : BaseControl
然而,在编译过程中,我得到了这个错误

Partial declarations of 'controlinheritance.componenets.FirstComponent' must not specify different base classes 
我应该怎么做才能使FirstComponent从BaseControl派生

编辑 多亏了阿披舍克的回答,我成功地继承了控制权。不过我还有一个问题。在基类中,我指定了一个属性publicgrid _MainGrid{get;set;}。现在我想在我的派生类中创建这个网格的一个实例。所以我用了这个代码
然而,我得到一个错误属性“\u MainGrid”没有值。第8行第36位

你看到我关于它的完整文章了吗

我希望这会对你有所帮助

如果您试图执行项目,它肯定会给您带来错误 你。这是因为,每个WPF窗口都是从baseWindow创建的 布局,而不是当前窗口布局。换句话说,如果你 看到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>

...
如果您仔细地看到这一点,您可以看到我已将一个名称空间添加到 项目,并将其命名为本地。所以BaseWindow应该来自 BaseWindow,因此它类似于local:BaseWindow


初始错误的原因是,该类实际上是一个局部类,除了更改基类的位置之外,它还在其他地方列出了一个特定的基类继承

至于你的财产“继承权”,我建议试试

public Grid MainGrid 
{ 
   get 
   { 
      return base.MainGrid; 
   } 

   set 
   { 
      base.MainGrid = value; 
   } 
}
但是,我应该注意,这不会给您一个指向基类的任何现有实例的链接。如果希望在派生类中有一个到该网格的唯一实例的保证链接,那么必须将基类属性设置为静态。 在这种情况下,您的代码将如下所示

public Grid MainGrid
{
    get
    {
        return BaseControl.MainGrid;
    }

    set
    {
        BaseControl.MainGrid = value;
    }
}

在XAML.cs文件中为Usercontrol指定其他基类时

 FirstComponent : BaseControl
您还应该在XAML中对此进行更改

 <Base:BaseControl x:Class="FirstComponent"
             xmlns:Base="clr-namespace:MyApplication.Base"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>


    </Grid>
</Base:BaseControl>

谢谢,这对我帮助很大。你能看看我的留言吗