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);

これは、実際に RootGroup.Loading を見つけることができるため、DataContext が null でない場合に機能します。ただし、null の場合、バインディングには参照するソースがありません。

だから私は、XAML データバインディングがその .Source として何を使用するのか疑問に思っていましたか? XAML で直接バインドすると、正しいプロパティにバインドされますが、同じ結果にはなりません。.Source を何に設定すればよいのか疑問に思っているので、 RootGroup.Loading にバインドできますか?

ありがとう、ラウル

4

1 に答える 1

2

これはあなたの質問に直接答えるものではありませんが、なぜ装飾を使用して読み込みアニメーション効果を得るのですか?

一番上にZオーダーされたTreeViewの兄弟である境界線要素を使用して、その中でアニメーションを実行しないのはなぜですか。

だからあなたはこのようなことをします

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

その後、ビジュアル ツリー全体を非表示にすることなく、XAML ですべてのバインドを行うことができます。

于 2009-11-20T22:20:18.623 に答える