В моей программе есть tabItems
, команды которых привязаны к модели представления. Я нахожусь в процессе реализации функции, которая будет копировать структуру дизайна «мастера» tabItem
вместе с его функциональностью команды для создания нового tabItem
. Мне нужно сделать это, потому что пользователю этой программы будет разрешено добавлять новые tabItems
.
В настоящее время я использую вопрос Копирование TabItem со структурой MVVM, но у меня, кажется, проблемы, когда функция пытается скопировать объект Grid
, используя dependencyValue
.
Класс, который я использую:
public static class copyTabItems
{
public static IList<DependencyProperty> GetAllProperties(DependencyObject obj)
{
return (from PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.SetValues) })
select DependencyPropertyDescriptor.FromProperty(pd)
into dpd
where dpd != null
select dpd.DependencyProperty).ToList();
}
public static void CopyPropertiesFrom(this FrameworkElement controlToSet,
FrameworkElement controlToCopy)
{
foreach (var dependencyValue in GetAllProperties(controlToCopy)
.Where((item) => !item.ReadOnly)
.ToDictionary(dependencyProperty => dependencyProperty, controlToCopy.GetValue))
{
controlToSet.SetValue(dependencyValue.Key, dependencyValue.Value);
}
}
}
Когда dependencyValue
достигает {[Content, System.Windows.Controls.Grid]}
, программа выдает InvalidOperationException was Unhandled
, утверждая, что "Указанный элемент уже является логическим дочерним элементом другого элемента. Сначала отключите его".
Что это значит? Является ли это общей проблемой с Grid
в WPF (я нарушаю какое-то правило, пытаясь это сделать?)? Есть ли что-то в моей программе, о чем я не знаю, что вызывает это?
tabItems
, это поставит под угрозу всю мою программу. Разве этот класс не делает то, о чем вы говорили? -- скопировать функциональность моегоtabItems
? - person Eric after dark   schedule 09.09.2013