WPF 控件的自定义基类

本文关键字:基类 自定义 控件 WPF | 更新日期: 2023-09-27 17:56:37

我已经为我的项目创建了一个自定义控件,我将创建更多。所有这些控件都有一些共同点,因此我创建了一个继承自UserControl的抽象类。

如果我通过VisualStudio创建一个CustomControl,它也继承自UserControl,我无法将其切换到我的抽象UserControl,因为VisualStudio会添加一些生成的代码文件。我不想弄乱这些文件。

我可以创建一个空的代码文件并自己编写所有内容,但是我无法使用 XAML(或者我还不知道如何操作)。

那么,如何在不丢失 XAML 的情况下使用自定义基类创建自定义控件呢?

WPF 控件的自定义基类

首先,您不能在 UserControl 类层次结构中轻松使用抽象类 - 它不适用于设计器(您将收到"无法创建 'AbstractBase' 的实例"消息)。 Windows表单曾经有同样的问题,并且有一些解决方法,所有这些都很痛苦。

删除"抽象"后,你应该能够通过在 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"