Подкласс дочернего окна XAML: "Элемент затенения InitializeComponent в базовом классе". Как я могу разрешить это предупреждение без изменения автоматически сгенерированного кода?

Я добавил два окна в проект приложения Silverlight 5: FooWindowBase а также SomeFooWindow, Последний является подклассом первого. Оба содержат вызов конструктора по умолчанию InitializeComponent и, по-видимому, Visual Studio или компилятор автоматически генерирует этот метод. Это приводит к следующему предупреждению компилятора в производном классе SomeFooWindow тот…

"суб InitializeComponent скрывает перегружаемый член, объявленный в базовом классе FooWindowBase , Если вы хотите перегрузить базовый метод, этот метод должен быть объявлен Overloads ".

поскольку InitializeComponent был автоматически сгенерирован в обоих случаях, кажется, у меня нет возможности добавить Shadows над Overloads спецификатор.

Есть ли способ предотвратить или избавиться от этого предупреждения компилятора без редактирования автоматически сгенерированного кода?


FooWindowBase :

  • XAML:

    <c:ChildWindow 
        x:Class="FooNamespace.FooWindowBase"
        xmlns:c="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
        …>
      …
    </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"
        …>
      …
    </l:FooWindowBase>
    
  • Код:

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

1 ответ

Решение

Я опубликую обходной путь, который я использовал для других, кто сталкивается с той же проблемой.

Один из опубликованных ответов на этот вопрос, заданный в Code Project, упоминает, что:

"В настоящее время получение сгенерированного класса XAML из другого сгенерированного класса XAML не поддерживается".

и решение будет:

"[…] Определите ваш базовый класс в коде без использования XAML."

Точно такие же слова упоминаются в этой статье Microsoft Knowledge Base, кстати. Таким образом, в основном, предупреждение компилятора не может быть устранено, потому что сценарий наследования, который я разместил, просто не поддерживается.

Я закончил тем, что сделал следующее:

  1. превратил производный класс SomeFooWindow в UserControl называется SomeFooControl;
  2. переименованный FooWindowBase в FooWindow и удалил MustInherit модификатор;
  3. добавил названный ContentPresenter контроль FooWindow;
  4. вместо того, чтобы создавать предыдущие SomeFooWindow, экземпляр FooWindow и установить ContentPresenterсодержание к экземпляру SomeFooControl:

    Dim someFooWindow = New FooWindow(…)
    someFooWindow.Content = New SomeFooControl(…)
    
Другие вопросы по тегам