代码之家  ›  专栏  ›  技术社区  ›  HaxElit

以编程方式进行WPF修饰器可见性数据绑定

  •  1
  • HaxElit  · 技术社区  · 16 年前

    我正在创建一个带有旋转图标的加载装饰器。我尝试直接在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不为空,这将有效,因为它实际上可以找到rootgroup.loading。但是如果它为空,那么绑定就没有可查看的源。

    所以我想知道XAML数据绑定使用什么作为它的.source?XAML中的直接绑定绑定到正确的属性,但它不能获得相同的结果。所以我想知道我应该将.source设置为什么,以便绑定到rootgroup.loading?

    谢谢, 劳尔

    1 回复  |  直到 16 年前
        1
  •  2
  •   Brad Cunningham    16 年前

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

    为什么不使用一个边界元素,它是你的树视图的兄弟,它在顶部是z顺序的,然后用它来做动画呢?

    所以你就这样做

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

    然后可以在XAML中执行所有绑定,而不隐藏整个可视化树。

    推荐文章