UserControl, который имеет универсальный класс в своем дереве наследования - PullRequest
2 голосов
/ 30 декабря 2008

Я пытаюсь создать UserControl, который наследуется от универсального класса. Он не наследуется напрямую от обобщенного класса, а через промежуточный класс, который не использует обобщенные значения. Это компилируется и работает во время выполнения, но я получаю ошибку во время разработки.

Вот мой общий родительский класс:

Public Class GenericParent(Of T)
    Inherits UserControl
End Class

Вот мой неуниверсальный родительский класс:

Public Class NonGenericParent
    Inherits GenericParent(Of String)
End Class

Вот мой XAML:

<local:NonGenericParent x:Class="SilverlightApplication5.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:SilverlightApplication5"
    Width="400" Height="300">
    <StackPanel>
        <Button Content="Hello"/>
    </StackPanel>
</local:NonGenericParent>

Анализатор IntelliSense выдает следующие ошибки:

  1. Свойство 'Ширина' не найдено в типе 'NonGenericParent'.
  2. Свойство «Высота» не найдено в типе «NonGenericParent».
  3. Тип «NonGenericParent» не поддерживает прямой контент.

Как будто IntelliSense не может увидеть дерево наследования за классом GenericParent. Я попытался указать ContentPropertyAttribute непосредственно в классе SilverlightApplication5.Page, классе NonGenericParent, и он не работает.

Я читал, что атрибут TypeArguments не поддерживается в Silverlight 2.0. Вот почему я создал промежуточный класс NonGenericParent.

Если у кого-нибудь есть идеи, как заставить замолчать эти ошибки, я буду рад их услышать.

Обновление: Мы открыли заявку в службу поддержки MSFT, и я обновлю ее с помощью любого решения.

Ответы [ 4 ]

3 голосов
/ 12 января 2009

Мы получили сообщение от Microsoft, что это вряд ли будет исправлено в будущих версиях. После того, как они решили проблему с поиском ответственной группы, кажется, что эта проблема принадлежит их группе разработчиков WPF, откуда и пришел ответ «не собираюсь это исправить».

Тем временем мы обновили наш код, чтобы вытаскивать дженерики из родительских классов, пока я не угадаю XAML 2009.

1 голос
/ 30 декабря 2008

Не уверен насчет silverlight, но он компилируется и работает так, как ожидается в c #:


class GenericObject[T] : UserControl
{
}

class StaticObject : GenericObject[Int32]
{
    public Int32 wide { get { return this.Width; } }
}

private void Form1_Load(object sender, EventArgs e)
{
    StaticObject so = new StaticObject();
    this.Text = so.wide.ToString();
}

Так что, если он компилируется против clr, он должен работать просто отлично.

Может быть, это просто ошибка с интеллигентностью, как вы предлагаете. Обычно я бы рекомендовал не игнорировать предупреждения компилятора, но в этом случае кажется, что предупреждение недействительно.

edit: замененные угловые скобки с квадратными скобками приводят к их зачистке.

0 голосов
/ 11 ноября 2011

Эта запись в блоге связана с вашей проблемой:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a-generic-base-class-must-be-in-separate-assembly.aspx

Для Silverlight кажется, что у вас должно быть 3 класса, чтобы это работало.

0 голосов
/ 30 декабря 2008

Несмотря на то, что серебро 2,0 (и особенно VS2008 для Silverlight) все еще очень молоды. В IDE все еще есть причуды.

У вас все еще есть проблема даже после успешной сборки?

...