0

我在 Silverlight 5 应用程序项目中添加了两个窗口:FooWindowBaseSomeFooWindow. 后者是前者的子类。两者都包含一个默认构造函数调用InitializeComponent,显然 Visual Studio 或编译器会自动生成该方法。这会导致派生类中出现以下编译器警告SomeFooWindow...</p>

“子InitializeComponent遮蔽了基类中声明的可重载成员FooWindowBase。如果要重载基方法,则必须声明此方法Overloads。”

由于InitializeComponent在这两种情况下都是自动生成的,因此我似乎无法添加ShadowsoverOverloads说明符。

有没有办法在不编辑自动生成的代码的情况下防止或消除此编译器警告?


FooWindowBase

  • XAML:

    <c:ChildWindow 
        x:Class="FooNamespace.FooWindowBase"
        xmlns:c="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
        …&gt;
      …
    </c:ChildWindow>
    
  • 代码:

    Imports System.Windows.Controls
    
    Partial MustInherit Class FooWindowBase : Inherits ChildWindow
        Public Sub New()
            InitializeComponent()
        End Sub
        …
    End Class
    

SomeFooWindow:

  • XAML:

    <l:FooWindowBase
        x:Class="FooNamespace.SomeFooWindow"
        xmlns:l="clr-namespace:FooNamespace;assembly=Foo"
        …&gt;
      …
    </l:FooWindowBase>
    
  • 代码:

    Partial Class SomeFooWindow : Inherits FooWindowBase
        Public Sub New()
            InitializeComponent()
        End Sub
        …
    End Class
    
4

1 回答 1

0

我将发布我最终为面临同样问题的其他人使用的解决方法。

在 Code Project 上提出的这个问题的一个发布答案提到:

“目前不支持从另一个 XAML 生成的类派生 XAML 生成的类。”

解决方案是:

“[...] 在不使用 XAML 的情况下全部在代码中定义您的基类。”

顺便说一句,此 Microsoft 知识库文章中提到了完全相同的词。所以基本上,编译器警告无法摆脱,因为我发布的继承场景根本不受支持。

我最终做了以下事情:

  1. 将派生类SomeFooWindow变成UserControl被调用的SomeFooControl
  2. FooWindowBase重命名FooWindow并删除了MustInherit修饰符;
  3. 添加了一个命名ContentPresenter控件FooWindow
  4. 而不是实例化 previous SomeFooWindow,而是实例化 aFooWindow并将ContentPresenter's 的内容设置为 a 的一个实例SomeFooControl

    Dim someFooWindow = New FooWindow(…)
    someFooWindow.Content = New SomeFooControl(…)
    
于 2014-11-26T08:49:23.930 回答