У меня есть потребность в DataTemplate, чтобы моя привязка могла потенциально использоваться для 2 различных типов RelativeSource, т.е. что-то вроде этого:
AllowDrop={Binding RelativeSource={RelativeSource AncestorType={x:Type Label} or AncestorType={x:Type TextBox}}, Path=AllowDrop}
В этом случае относительный источник ищет дерево и находит первого предка типа Label или TextBlock. Теперь я знаю, что вы все скажете: «Почему, черт возьми, вы хотите сделать что-то глупое для этого?» Справедливый вопрос, я рад, что вы спросили :-) Причина в том, что я использую сетку WPFish из syncfusion. Я говорю WPFish, потому что тот, кто написал его, не имел четкого понимания того, как должен работать WPF, и для того, чтобы заставить его работать должным образом, требуется немало хаков. Один из хаков, мне нужно установить AllowDrop для ContentControl в моем шаблоне так же, как свойство AllowDrop в их сетке. Обычно это было бы довольно просто - просто связать с типом RelativeSource их сетки, но у них есть 2 сетки. Один называется GridControl, а другой - GridDataControl. Поэтому мне нужно поискать в дереве, чтобы найти первый элемент управления типа GridControl или GridDataControl и извлечь из этого свойство AllowDrop.
Спасибо заранее,
Michael