WPF控件的自定义基类

6
我创建了一个自定义控件来实现我的项目,而且我还要创建一些自定义控件。所有这些控件都有共同之处,因此我创建了一个抽象类,它继承自UserControl。
如果我通过VisualStudio创建自定义控件,它也会继承自UserControl,我无法将其切换到我的抽象UserControl,因为VisualStudio将添加一些生成的代码文件。我不想去碰这些文件。
我可以只创建一个空的代码文件并自己编写所有内容,但那样我就不能使用XAML(或者我还不知道如何使用)。
那么,我如何创建一个具有自定义基类的自定义控件,同时又不失去XAML?
1个回答

12

首先,在UserControl类层次结构中无法轻松使用抽象类--它与设计器不兼容(您将收到“无法创建“AbstractBase”的实例”消息)。Windows表单曾经也有同样的问题,而且有一些解决方法,但都很痛苦。

去掉“abstract”后,您应该能够通过在XAML定义中包含命名空间并像这样更改代码后端来引用基类:

<local:AbstractBase x:Class="Test.ConcreteControl"
             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" 
             xmlns:local="clr-namespace:Test"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
    </Grid>
</local:AbstractBase>

并且:

    /// <summary>
    /// Interaction logic for ConcreteControl.xaml
    /// </summary>
    public partial class ConcreteControl : AbstractBase
    {
        public ConcreteControl()
        {
            InitializeComponent();
        }
    }

这假设你的基类被称为"AbstractBase"


生成的文件没有任何更改吗? - Marcel B
我相信代码生成器将仅创建用于保存子元素引用的字段,并将添加初始化代码到InitializeComponent()方法中。 - v00d00
生成的文件已自动更改为继承自AbstractBase形式...非常感谢,micahtan。 - Marcel B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接