WPF Adorner可见性数据绑定以编程方式

时间:2009-11-20 18:29:07

标签: wpf data-binding adorner

我正在创建一个装有旋转图标的装载工具。我尝试直接在XAML中绑定visibility属性,但实际上隐藏了其层次结构中的所有内容。

我在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不为null,这将有效,因为它实际上可以找到RootGroup.Loading。但如果它为null,则绑定没有可供查看的源。

所以我想知道XAML数据绑定作为它的.Source使用了什么?直接在XAML中绑定绑定到正确的属性,但它不会达到相同的结果。所以我只是想知道我应该将我的.Source设置为什么我可以绑定到RootGroup.Loading?

谢谢, 劳尔

1 个答案:

答案 0 :(得分:2)

这不会直接回答您的问题,但为什么您使用装饰器来获得加载动画效果。

为什么不使用一个边框元素,它是TreeView的兄弟,它在顶部是Z-Ordered,然后在那里做动画。

所以你做这样的事情

<Grid>    
  <TreeView />
  <Border x:Name="myBorder">... </Border>      
</Grid>

然后,您可以在XAML中完成所有绑定,而不会隐藏整个Visual Tree。