WPF-用户控件继承
我对WPF中的控件继承有问题。我创建了一个名为BaseUserControl的UserControl。我希望此控件成为其他WPF userControls的基本控件。所以我写了另一个名为FirstComponent的用户控件。在下一步中,我更改了这个代码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
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>
谢谢,这对我帮助很大。你能看看我的留言吗