¿Cómo puedo solucionar el error WPF Designer 'El tipo {0} no soporta contenido directo'. '?

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

  •  21-08-2019
  •  | 
  •  

Pregunta

El XAML siguiente (abajo) define una colección personalizada de los recursos y los intentos de rellenarla con un objeto personalizado;

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

El problema es que me da un error en el diseñador de 'El tipo 'MyCustomCollection' no soporta el contenido directo'. He tratado de establecer ContentProperty como se aconseja en MSDN, pero no puede averiguar qué puso a. El objeto de colección personalizada que utilizo es de abajo y es muy simple. He intentado artículo, artículos y MyCustomItem y no puedo pensar en qué más probar.

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

Cualquier pistas sobre dónde voy mal sería recibida con gratitud. También consejos sobre cómo cavar en el modelo de objetos de WPF para ver qué propiedades se exponen en tiempo de ejecución, que podría ser capaz de entenderlo de esa manera también.

Regards

Ryan

¿Fue útil?

Solución

Usted tiene que inicializar el ContentPropertyAttribute con el nombre de la propiedad que va a representar el contenido de su clase. En su caso, ya que se hereda de ObservableCollection, que sería la propiedad Items. Por desgracia, la propiedad Items es de sólo lectura y que no está permitido, ya que la propiedad debe tener un contenido colocador. Así que hay que definir una propiedad personalizada envoltura alrededor de los elementos y el uso que en su atributo - de esta manera:

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

Y usted debe estar bien. Lo siento por hacer que en C # cuando tu ejemplo es en VB, pero realmente chupar en VB y no pudo conseguir incluso una cosa tan simple razón ... De todos modos, es muy fácil de convertirlo, por lo que -. Esperamos que ayuda

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top