【问题标题】:Custom Baseclass for WPF-ControlWPF-Control 的自定义基类
【发布时间】:2011-05-17 19:46:57
【问题描述】:

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

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

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

那么如何在不丢失 XAML 的情况下创建具有自定义基类的 CustomControl?

【问题讨论】:

    标签: c# .net wpf visual-studio xaml


    【解决方案1】:

    首先,您不能轻松地在 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”

    【讨论】:

    • 生成的文件没有变化?
    • 我相信代码生成器只会创建包含对子元素的引用并将初始化代码添加到 InitializeComponent() 方法的字段。
    • 生成的文件也已改为自动继承AbstractBase ...非常感谢,micahtan
    猜你喜欢
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2016-11-05
    • 2011-12-14
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多