【问题标题】:How do I make custom XAML and CS partial classes with inheritance?如何使用继承创建自定义 XAML 和 CS 部分类?
【发布时间】:2013-07-15 07:42:01
【问题描述】:

我对此进行了彻底的研究,发现了thisthisthis。我发现的所有帮助页面都说的差不多。这不是很复杂,所以我很确定我做对了,但是幕后文件都变得混乱了。以下三个错误中的任何一个都会出现,只有错误 1 ​​和 2 会阻止它运行。

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

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

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

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

我只想说我很困惑,任何关于可能出错的见解都将不胜感激。另外,我正在使用 VS 2012 Professional,我的一些同事似乎认为它至少是错误 3 的罪魁祸首。

EAC1O1.xaml.cs

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

选项.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 {

【问题讨论】:

  • 天啊,你想做什么?? O.O
  • .cs 和 .xaml 文件继承自抽象类 Option(它有许多属性和方法适用于实现它们的类),但它们本身需要位于不同的文件中非常不同且复杂的 GUI,其中 Option 继承自 UserControl。真的很简单。 :)
  • 老兄,您将逻辑和功能放在视图中,它确实属于 not。请在此处展示您要实现的目标,我可以告诉您在 WPF 中执行此操作的正确方法。
  • 有一个全屏 GUI 窗口,通过一堆不相关的 GUI 控件,最终将向用户显示数千个 UserControl 中的一个。每一个都是非常复杂数据的计算器,它们在设计、数据类型和功能上可能会有很大差异。因此需要可以在设计器中编码然后插入的单独文件。但是,它们都有一些共同的属性,例如 GetPoints() 或 .CalcName。除非我遗漏了什么,否则视图中唯一的逻辑/功能是所有计算器共有的极少数属性/方法。
  • “它有许多属性和方法适用于实现它们的那些类”......可能是混淆的来源。我应该说几句。

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


【解决方案1】:

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

【讨论】:

  • 这是个好主意,但不是。行为完全没有变化。我不久前失去了设计师,这不是我主要关心的问题。每个实例化的 Option 类都可以设计为一个虚拟的 UserControl,然后复制/粘贴到适当的 .xaml/.cs 文件中。
【解决方案2】:

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

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

方法一: 我将 Option 类分离到一个不同的程序集(类库)中,现在它的工作原理与编写的完全一样,只是更改了命名空间。

方法二: 一位同事在 MS VS 2010 中建立了相同的项目,并且效果也很好。

MS VS BUG# 794312

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多