Недавно я немного возился с некоторыми сторонними элементами управления WPF и столкнулся с некоторым тупиком.
Я расширил один из объектов (производный от DependencyObject), чтобы включить Удобство DependencyProperty в мысли, что я смогу привязать к нему. Однако, поскольку рассматриваемый объект не является FrameworkElement, он не включается в логическое дерево, и, следовательно, мое связывание с использованием RelativeSource не разрешается правильно, что приводит к ошибке «Не удается найти источник для привязки ....
Чтобы обойти это, я мог бы использовать StaticResources (который работает нормально), но просто для проверки этого я попытался добавить элемент управления в логическое дерево основного FrameworkElement с помощью AddLogicalChild. Всякий раз, когда я делаю это, объект не становится родительским. Тестирование в другом контексте:
public MainWindow()
{
InitializeComponent();
DependencyObject obj = new DependencyObject();
FrameworkElement el = new FrameworkElement();
this.AddLogicalChild(obj);
this.AddLogicalChild(el);
var objParent = LogicalTreeHelper.GetParent(obj);
//This will return null
var elParent = LogicalTreeHelper.GetParent(el);
//This will return our Window
}
Я просто не понимаю что-то, стоящее за концепцией логического дерева или концепции объекта зависимости? Похоже (из описания), что я должен быть в состоянии родить все, что происходит от DependencyObject в логическом дереве.