VB.Net WPF项目中为UserControl加属性并继承时遇BC30928错误求助
问题原因与解决办法
这个错误属于代码编写问题,核心原因是UserControl的XAML与后台代码的部分类基类不匹配:
WPF中,UserControl的XAML文件会自动生成一个partial类,默认继承UserControl;但你后台代码让ucTestInherit继承自定义基类clsUcBase,两个部分类的基类不一致,触发了BC30928错误。
解决步骤
- 修改XAML根标签:将原有的
<UserControl>替换为你的自定义基类clsUcBase,同时添加基类所在的命名空间引用(比如xmlns:local="clr-namespace:你的命名空间")。 - 确保后台代码的
ucTestInherit是partial类,且仅继承clsUcBase,不要重复指定继承UserControl。 - 自定义基类
clsUcBase需满足:public访问修饰符、partial类、继承UserControl、包含public无参构造函数(XAML实例化时会调用)。
示例代码
基类clsUcBase(VB代码)
Imports System.Windows.Controls Imports System Namespace YourAppNamespace Public Partial Class clsUcBase Inherits UserControl Public Property ucGuid As Guid = Guid.NewGuid() Public Sub New() InitializeComponent() End Sub End Class End Namespace
ucTestInherit的XAML代码
<local:clsUcBase x:Class="YourAppNamespace.ucTestInherit" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:YourAppNamespace"> <!-- 这里放置用户控件的UI内容 --> </local:clsUcBase>
ucTestInherit的后台VB代码
Namespace YourAppNamespace Partial Public Class ucTestInherit Inherits clsUcBase Public Sub New() InitializeComponent() End Sub End Class End Namespace
内容的提问来源于stack exchange,提问作者DSchmidt
相关产品推荐
相关产品推荐

