7

次の 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' は直接コンテンツをサポートしていません」というエラーが発生することです。MSDN でアドバイスされているように ContentProperty を設定しようとしましたが、何に設定すればよいかわかりません。私が使用するカスタム コレクション オブジェクトは次のとおりで、非常に単純です。Item、Items、および MyCustomItem を試しましたが、他に何を試せばよいかわかりません。

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

私がどこで間違っているのかについての手がかりは、ありがたく受け取ります。また、実行時にどのプロパティが公開されているかを確認するために WPF オブジェクト モデルを掘り下げる方法についてのヒントもあります。

よろしく

ライアン

4

1 に答える 1

5

クラスのコンテンツを表すプロパティの名前で ContentPropertyAttribute を初期化する必要があります。あなたの場合、ObservableCollection から継承するため、それは Items プロパティになります。残念ながら、Content プロパティにはセッターが必要なため、Items プロパティは読み取り専用であり、許可されていません。したがって、Items の周りにカスタム ラッパー プロパティを定義し、それを属性で使用する必要があります。

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

そして、あなたは大丈夫なはずです。あなたの例がVBであるときにC#でそれを行って申し訳ありませんが、私はVBが本当に苦手で、そのような単純なことさえ正しく理解できませんでした.とにかく、それを変換するのは簡単です.

于 2008-12-10T17:02:29.093 に答える