سؤال

أحاول إنشاء 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' لا يدعم المحتوى المباشر.

كما لو التحسس الذكي لا يمكن أن نرى حتى الميراث شجرة الماضي GenericParent الدرجة.لقد حاولت تحديد ContentPropertyAttribute مباشرة على SilverlightApplication5.صفحة الفئة ، NonGenericParent صف أنها لا تعمل.

لقد قرأت أن TypeArguments السمة غير معتمد في Silverlight 2.0.هذا هو السبب لقد خلق المتوسطة NonGenericParent الدرجة.

إذا كان أي شخص لديه أي أفكار كيف صمت هذه الأخطاء سأكون حريصة على أن تسمع لهم.

تحديث: لقد فتح تذكرة دعم مع MSFT, سوف أقوم بتحديث هذا مع ما حل بهم هو.

هل كانت مفيدة؟

المحلول

لقد تلقينا رسالة من Microsoft أن هذا ليس من المرجح أن تكون ثابتة في الإصدارات المستقبلية.بعد أن ارتدت المشكلة حول محاولة للعثور على المسؤولين عن الفريق ، يبدو أن هذه المشكلة تعود إلى WPF المطور المجموعة التي هو فيها 'لن يصلحه' جاء الجواب من.

في هذه الأثناء قمنا بتحديث رمز نثر من الوراثة من الوالدين الطبقات حتى اعتقد XAML 2009.

نصائح أخرى

غير متأكد حول سيلفرلايت ، ولكن هذا برمجيا و يعمل كما هو متوقع في 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, يجب أن تعمل على ما يرام.

يمكن أن يكون مجرد التحسس علة كما تقترحه أنت.عادة أنصحك بعدم تجاهل comiler التحذيرات ، ولكن في هذه الحالة يبدو أن الإنذار غير صالح.

تحرير:استبدال أقواس زاوية مع أقواس مربعة يسبب تجريد ذلك لهم.

على الرغم من كونها في silverlight 2.0 (وخاصة VS2008 القرص silverlight) لا تزال صغيرة جدا.لا تزال هناك المراوغات في IDE الأشياء.

هل لا يزال لديك مشكلة حتى بعد سوسسفول بناء ؟

هذا بلوق وظيفة ويبدو أن تكون ذات صلة إلى الإصدار الخاص بك:

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 فصول هذا العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top