Wie behebe ich die WPF-Designer-Fehler ‚Der Typ {0} nicht direkt Inhalte unterstützen‘. '?

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

  •  21-08-2019
  •  | 
  •  

Frage

Das folgende XAML (unten) definiert eine benutzerdefinierte Sammlung in Ressourcen und versucht es mit einem benutzerdefinierten Objekt zu füllen;

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

Das Problem ist, dass ich einen Fehler in dem Designer von ‚Der Typ‚MyCustomCollection get‘nicht direkt Inhalt nicht unterstützt‘. Ich habe versucht, Content Einstellung wie in MSDN empfohlen, aber kann nicht herausfinden, was es auf. Das benutzerdefinierte Sammlung Objekt, das ich verwende, ist unten und ist sehr einfach. Ich habe versucht, Artikel, Artikel und MyCustomItem und kann nicht glauben, was anderes zu versuchen.

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

Jede Hinweise darauf, wo ich falsch werde würde dankbar empfangen. Auch Hinweise, wie in das WPF-Objektmodell zu graben, um zu sehen, welche Eigenschaften zur Laufzeit ausgesetzt sind, ich könnte in der Lage sein, um einen Reim zu, dass die Art und Weise aus.

Viele Grüße

Ryan

War es hilfreich?

Lösung

Sie haben den Content mit dem Namen der Eigenschaft zu initialisieren, den Inhalt Ihrer Klasse repräsentieren geht. In Ihrem Fall, weil Sie von ObservableCollection erben, das wäre die Eigenschaft Items sein. Leider ist die Eigenschaft Items schreibgeschützt und das ist nicht erlaubt, weil die Content-Eigenschaft einen Setter haben muss. So haben Sie eine benutzerdefinierten Wrapper Eigenschaft um Elemente zu definieren und verwenden, die in Ihrem Attribute - etwa so:

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

Und Sie sollten alles in Ordnung sein. Sorry für die in C # zu tun, wenn Ihr Beispiel in VB, aber ich wirklich sauge an VB und selbst eine so einfache Sache nicht richtig machen könnte ... Wie auch immer, es ist ein Kinderspiel, es zu konvertieren, so -. Hofft, dass hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top