1

我正在创建一个 Loading 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。但如果它为 null,则绑定没有可查看的源。

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

谢谢,劳尔

4

1 回答 1

2

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

为什么不只使用一个边框元素,它是 TreeView 的兄弟元素,它在顶部按 Z 顺序排列,然后在其中制作动画。

所以你做这样的事情

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

然后,您可以在 XAML 中进行所有绑定,而无需隐藏整个 Visual Tree。

于 2009-11-20T22:20:18.623 回答