كيف يمكنني حل الخطأ مصمم WPF "نوع {0} لا يدعم المحتوى المباشر '.'؟

StackOverflow https://stackoverflow.com/questions/356663

  •  21-08-2019
  •  | 
  •  

سؤال

ووXAML التالية (أدناه) يحدد مجموعة مخصصة في الموارد ومحاولات لملء ذلك مع كائن مخصص؛

<UserControl x:Class="ImageListView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300"
    xmlns:local="clr-namespace:MyControls" >
    <UserControl.Resources>
        <local:MyCustomCollection x:Key="MyKey">
            <local:MyCustomItem>
            </local:MyCustomItem>
        </local:MyCustomCollection>
    </UserControl.Resources>
</UserControl>

والمشكلة هي أن أحصل على خطأ في المصمم من 'نوع' MyCustomCollection 'لا يدعم المحتوى المباشر ". لقد حاولت وضع ContentProperty كما نصح في MSDN ولكن لا يمكن معرفة ما يجب تعيينه ل. الكائن مجموعة مخصصة التي يمكنني استخدام أقل وبسيط جدا. لقد حاولت البند، عناصر وMyCustomItem ولا يمكن التفكير في أي شيء آخر لمحاولة.

<ContentProperty("WhatGoesHere?")> _
Public Class MyCustomCollection
    Inherits ObservableCollection(Of MyCustomItem)
End Class

وأي أدلة إلى أين أنا ذاهب خاطئ سوف تلقى بامتنان. يلمح أيضا على كيفية حفر أسفل إلى طراز كائن WPF لمعرفة ما يتعرض الخصائص في وقت التشغيل، وأنا قد تكون قادرة على معرفة ذلك بهذه الطريقة أيضا.

والتحيات

وريان

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

المحلول

لديك لتهيئة ContentPropertyAttribute مع اسم الخاصية ما يجري لتمثيل محتوى صفك. في الحالة الخاصة بك، لأنك ترث من ObservableCollection، التي من شأنها أن تكون ملكا العناصر. للأسف، للقراءة فقط الممتلكات الأصناف وهذا ما لا يسمح، لأنه يجب أن يكون العقار المحتوى واضعة. ولذلك عليك أن تحدد خاصية المجمع مخصص حول عناصر واستخدام ذلك في السمة الخاصة بك - مثل ذلك:

public class MyCustomItem
{ }

[ContentProperty("MyItems")]
public class MyCustomCollection : ObservableCollection<MyCustomItem>
{
    public IList<MyCustomItem> MyItems
    {
        get { return Items; }
        set 
        {
            foreach (MyCustomItem item in value)
            {
                Items.Add(item);
            }
       }
    }
}

ويجب أن تكون كل الحق. آسف للقيام بذلك في C # عندما المثال الخاص بك هو في VB، لكنني حقا تمتص في VB، ولا يمكن حتى الحصول على مثل هذا الشيء البسيط الحق ... على أي حال، انها مبكرة لتحويله، لذلك - على أمل أن يساعد

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