Comment puis-je résoudre l'erreur Designer WPF « Le type {0} ne supporte pas directement au contenu » '.?

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

  •  21-08-2019
  •  | 
  •  

Question

Ce qui suit XAML (ci-dessous) définit une collection personnalisée en ressources et tente de le remplir avec un objet personnalisé;

<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>

Le problème est que je reçois une erreur dans le concepteur de « Le type « MyCustomCollection » ne supporte pas le contenu direct ». J'ai essayé d'installer ContentProperty comme conseillé dans MSDN mais ne peut pas comprendre ce que pour le régler. L'objet de collection personnalisée que je l'utilise est ci-dessous et est très simple. J'ai essayé article, des articles et MyCustomItem et ne peut pas penser à quoi d'autre essayer.

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

Les indices à l'endroit où je me trompe serait reçu avec gratitude. conseils aussi sur la façon de creuser dans le modèle d'objet WPF pour voir ce que les propriétés sont exposées à l'exécution, je pourrais être en mesure de le comprendre de cette façon aussi.

Cordialement

Ryan

Était-ce utile?

La solution

Vous devez initialiser le ContentPropertyAttribute avec le nom de la propriété qui va représenter le contenu de votre classe. Dans votre cas, parce que vous héritez de ObservableCollection, ce serait la propriété Items. Malheureusement, la propriété Items est en lecture seule et que n'est pas permis, parce que la propriété du contenu doit avoir un poseur. Vous devez donc définir une propriété d'emballage personnalisé autour des articles et l'utiliser dans votre attribut - comme ceci:

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);
            }
       }
    }
}

Et vous devriez être bien. Désolé pour le faire en C # lorsque votre exemple est en VB, mais je sucent vraiment à VB et ne pouvait pas obtenir une telle chose simple droit ... Quoi qu'il en soit, il est un clin d'oeil pour le convertir, donc -. Espérons que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top