【问题标题】:Partial declarations must not specify different base classes?部分声明不能指定不同的基类?
【发布时间】:2012-04-04 12:18:29
【问题描述】:

我看到许多其他人在其他问题中询问此错误消息,但我似乎对自己解决此问题的方法了解不够。我通过 WPF UserControl 创建了这个错误

public partial class EnterNewRequest : UserControl

但后来我想向 UserControl 添加一个方法,所以我使用继承将它粘贴在那里(不能使用扩展,因为我需要覆盖这个方法)。但是现在我的用户控件很不高兴,我不确定我需要更改 xaml 中的哪些内容。 UserControl 更改块位于命名空间 RCO_Manager 中。这是我的 xaml:

<UserControl x:Class="RCO_Manager.EnterNewRequest"
         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" 

【问题讨论】:

  • 错误是什么?我从未听说过WindowIsUpsetException。不过看起来很可怕!
  • @Baboon 在 msdn 上查看,它基于 WindowsCantReadMyMindAndMagicallyFixThis 类。
  • InnerException 是什么?
  • @Baboon 哦,你想知道错误。我虽然你在问题标题中说它只是在开玩笑。这是“部分声明不得指定不同的基类”,是编译器错误

标签: c# wpf xaml inheritance


【解决方案1】:

我在使用 Windows Phone 时遇到了同样的问题。我不记得确切的例外情况,但您可以看到XAML here on GitHubthe page code herebase page code here(我的是基本页面,而不是基本控件)。我需要添加一个新的XAML 命名空间并更改&lt;UserControl/&gt; 声明:

代码假设

namespace RCO_Manager
{
    // Inherits **Base**UserControl, not UserControl
    public partial class EnterNewRequest : BaseUserControl
    {
        // Magic goes here
        ...
    }
}

XAML

<local:BaseUserControl
    xmlns:local="clr-namespace:RCO_Manager"
    x:Class="RCO_Manager.EnterNewRequest"

旁注

根据Baboon,一旦在XAML 中指定了基类,就不需要在代码隐藏中指定它,因此您可以更改代码隐藏以显示以下内容。我现在无法验证它,但你可以在让它工作后尝试一下。

public partial class EnterNewRequest // Don't specify BaseUserControl here
{
    ...

【讨论】:

  • 顺便说一句,在 XAML 和代码隐藏中声明基类是多余的。
  • 至少在 Windows Phone 中,当我不仅将 BaseUserControl 而不是 XAML 放入代码中时,我得到了相同的 WindowIsUpsetException。也许这也能解决他的问题?我会更新我的答案,说我有同样的问题。
  • 但是,是的,创建一个继承 UserControl 的类,然后让你的控件继承它应该是要走的路。
  • 这仍然不起作用,我已经尝试过使用常规 UserControl 和新继承的 UserControl。我的 xaml 是
  • 你打错了。这是clr-namespace:RCO_Manager,而不是clr-namespace.RCO_Manager。冒号,不是句号。另外,不是&lt;local:UserControl/&gt;,而是&lt;local:BaseUserControl/&gt;。请再次阅读我的回答。
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多