Microsoft は、WPF に PropertyGrid コントロールを含めることに意味がないと考えていたと思います。独自のコントロールを作成するのは非常に簡単であり、コントロールを作成した場合、スタイルを設定するのが難しくなるからです。
独自の PropertyGrid を作成するには、 を左にドックされたを含む をプロパティ名用に、 を値エディター用に使用<ListBox>
して、プロパティのグループ化を有効にします。<ItemsTemplate>
<DockPanel>
<TextBlock>
<ContentPresenter>
Category
記述する必要があるコードは、オブジェクトを反映してプロパティのリストを作成するコードだけです。
使用するものの大まかなアイデアは次のとおりです。
DataContext =
from pi in object.GetType().GetProperties()
select new PropertyGridRow
{
Name = pi.Name,
Category = (
from attrib in pi.GetCustomAttributes(false).OfType<CategoryAttribute>()
select attrib.Category
).FirstOrDefault() ?? "None",
Description = (
from attrib in pi.GetCustomAttributes(false).OfType<DescriptionAttribute>()
select attrib.Description
).FirstOrDefault(),
Editor = CreateEditor(pi),
Object = object,
};
CreateEditor メソッドは、実際のプロパティ値へのバインディングを使用して、プロパティに適したエディターを構築するだけです。
XAML では、次の<ListBox.ItemTemplate>
ようになります。
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding PropertyName}" Width="200" />
<ContentPresenter DataContext="{Binding Object}" Content="{Binding Editor}" />
</DockPanel>
</DataTemplate>
残りの詳細を記入させていただきます。