Связывание данных видимости WPF Adorner программно
Я создаю загрузочный аксессуар, на котором есть вращающийся значок. Я попытался связать свойство видимости непосредственно в XAML, но это фактически скрывает все внутри его иерархии.
У меня есть это в моем XAML:
<AdornerDecorator Visibility="{Binding Path=RootGroup.Loading, Converter={StaticResource VisibilityConverter}}">
<TreeView x:Name="groupTreeView" />
</AdornerDecorator>
и это в моем конструкторе
LoadingAdorner adorner = new LoadingAdorner(groupTreeView);
AdornerLayer.GetAdornerLayer(groupTreeView).Add(adorner);
Я не хотел этого, поэтому я попытался связать его в коде:
LoadingAdorner adorner = new LoadingAdorner(groupTreeView);
Binding bind = new Binding("RootGroup.Loading");
bind.Source = this.DataContext;
bind.Converter = new VisibilityConverter();
adorner.SetBinding(LoadingAdorner.VisibilityProperty, bind);
AdornerLayer.GetAdornerLayer(groupTreeView).Add(adorner);
Это будет работать, если DataContext не является нулевым, потому что он действительно может найти RootGroup.Loading. Но если оно пустое, то привязка не имеет источника, на который можно посмотреть.
Поэтому мне было интересно, что связывание данных XAML использует в качестве своего.Source? Привязка напрямую в XAML связывает с правильным свойством, но не дает того же результата. Так что мне просто интересно, что я должен установить для моего.Source - чтобы я мог связываться с RootGroup.Loading?
Спасибо Рауль
1 ответ
Это не дает прямого ответа на ваш вопрос, но почему вы используете Adorner, чтобы получить эффект загрузки анимации.
Почему бы просто не использовать элемент границы, который является родственным элементом вашего TreeView с Z-порядком сверху, а затем выполнить анимацию в этом направлении.
Итак, вы делаете что-то вроде этого
<Grid>
<TreeView />
<Border x:Name="myBorder">... </Border>
</Grid>
Затем вы можете выполнить всю привязку в XAML, не скрывая всего дерева визуалов.