Я думаю, что Microsoft не видела смысла включать элемент управления PropertyGrid в WPF, потому что создать свой собственный элемент тривиально, и если бы они создали элемент управления, его было бы сложнее стилизовать.
Чтобы создать свою собственную 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>
Я позволю вам заполнить остальные детали.