Come posso risolvere l'errore Designer WPF 'Il tipo {0} non supporta contenuti diretta'. '?

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

  •  21-08-2019
  •  | 
  •  

Domanda

Il XAML seguente (in basso) definisce una raccolta personalizzata di risorse e tenta di popolarlo con un oggetto personalizzato;

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

Il problema è che ottengo un errore nella finestra di progettazione di 'tipo 'MyCustomCollection' non supporta contenuti diretta'. Ho provato a installare ContentProperty come consigliato in MSDN, ma non riesco a capire cosa impostarlo. L'oggetto di raccolta personalizzato che uso è al di sotto ed è molto semplice. Ho provato Voce, oggetti e MyCustomItem e non riesco a pensare a che altro per provare.

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

Le eventuali indizi utili a capire dove sto andando male riconoscente sarebbe ricevuto. suggerisce anche sul modo di scavare nella modello di oggetti WPF per vedere quali proprietà sono esposti a run-time, potrei essere in grado di capirlo in quel modo.

Saluti

Ryan

È stato utile?

Soluzione

È necessario inizializzare la ContentPropertyAttribute con il nome della proprietà che sta per rappresentare il contenuto della classe. Nel tuo caso, perché si eredita dalla ObservableCollection, che sarebbe la proprietà Items. Purtroppo, la proprietà Items è di sola lettura e che non è consentito, perché la proprietà Content deve avere un setter. Quindi, è necessario definire una proprietà wrapper personalizzato intorno e di un uso che nel tuo attributo - in questo modo:

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

E si dovrebbe essere tutto a posto. Ci scusiamo per farlo in C # quando il vostro esempio è in VB, ma ho davvero schifo a VB e non poteva ottenere anche una cosa così semplice diritto ... Ad ogni modo, è un gioco da ragazzi per convertirlo, quindi -. Speranza che aiuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top