Несколько RelativeSource - PullRequest
       1

Несколько RelativeSource

1 голос
/ 10 октября 2011

У меня есть потребность в 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

1 Ответ

1 голос
/ 10 октября 2011

Используйте конвертер связывания, привязайте его к самому элементу, а затем просмотрите визуальное дерево в конвертере привязок, чтобы найти нужный элемент ..... uuugggglllyyy !!

{Binding Path=., RelativeSource={RelativeSource Self}, Converter={StaticResource findTheCorrectParentConverter}}

и некоторый код в вашем конвертере, например:

DependencyObject parent = VisualTreeHelper.GetParent(item);
while(!(parent is TextBox|| parent is Label)){
   parent = VisualTreeHelper.GetParent(parent);
}

if (parent != null){
   //do some stuff with your stuff.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...