如何使用继承制作自定义XAML和CS分部类?

时间:2013-07-16 22:40:44

标签: wpf xaml inheritance user-controls partial-classes

我对此进行了彻底的研究,找到了thisthisthis。我发现的所有帮助页面说的几乎都是一样的。它并不是很复杂,所以我很确定我做得对,但幕后文件却让人感到困惑。显示以下三个错误中的任何一个,只有错误1和2使其无法运行。

错误1: 如果在运行XAML文件时在编辑器中打开了XAML文件,那么仅该文件的错误是: 名称“Option”在命名空间“clr-namespace:Addin”

中不存在

错误2: 如果运行时XAML文件未在编辑器中打开,则错误为: “Addin.Addin”类型中不存在类型名称“选项”。 ...在所有g.cs文件上。

错误3:与1完全相同,但在不同的对象上。当我运行它时,它确实解决了,没有错误,并且完全按照预期的方式工作。

它好像VS确信该类不存在但只是在涉及继承时才真正关心。

我只想说我感到困惑,并且对于可能出现的问题的任何见解都会非常感激。此外,我正在使用VS 2012 Professional,我的一些同事似乎认为至少是错误3的罪魁祸首。

EAC1O1.xaml.cs

namespace Addin
{
    public partial class EAC1O1 : Option
    {
        public EAC1O1()
        {
            InitializeComponent();
        }
    }
}

Option.cs

namespace Addin
{
    public abstract class Option : UserControl
    {

EAC1O1.xaml

<local:Option x:Class="Addin.EAC1O1"
             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:Addin"
             mc:Ignorable="d" >
    <DockPanel>

    </DockPanel>
</local:Option>

EAC1O1.g.cs

namespace Addin{


    /// <summary>
    /// EAC1O1
    /// </summary>
    public partial class EAC1O1 : Addin.Option, System.Windows.Markup.IComponentConnector {

2 个答案:

答案 0 :(得分:0)

您可能会尝试让您的基础Option课程不是抽象的。设计人员的一部分依赖于能够创建在XAML标记中使用的类和/或基类的实例。

答案 1 :(得分:0)

编辑:心理,它不是一个错误。 (好吧,它可以使用一些额外的功能来避免它。)我有一个名为与命名空间相同的类。这从来没有打破任何东西,它没有抛出任何警告,所以我没有意识到这是不是没有。更改类名修复了所有问题。如果你这样做,VS应该发出警告,这样你就知道它可能会破坏它。

该解决方案最终成为Visual Studio 2012中的一个错误。我通过两种方法展示了这一点。

方法一: 我将Option类分成了一个不同的程序集(类库),现在它的工作方式与编写完全相同,只是更改名称空间。

方法二: coleague在MS VS 2010中设置了相同的项目,它也运行得很好。

MS VS BUG#794312