Подкласс дочернего окна 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, кстати. Таким образом, в основном, предупреждение компилятора не может быть устранено, потому что сценарий наследования, который я разместил, просто не поддерживается.
Я закончил тем, что сделал следующее:
- превратил производный класс
SomeFooWindow
вUserControl
называетсяSomeFooControl
; - переименованный
FooWindowBase
вFooWindow
и удалилMustInherit
модификатор; - добавил названный
ContentPresenter
контрольFooWindow
; вместо того, чтобы создавать предыдущие
SomeFooWindow
, экземплярFooWindow
и установитьContentPresenter
содержание к экземпляруSomeFooControl
:Dim someFooWindow = New FooWindow(…) someFooWindow.Content = New SomeFooControl(…)