ListBoxのDataTemplate内のコントロールへのコンバータへのバインド

私はバインディングを介してコンバータにTextBlockを渡そうとしています


    
        
            
            
            
        
        
            
                
                    
                        
                            
                                
                                
                            
                        
                    

                    

                
            
        
    

DataContext(Binding Path = "Data.Name")へのバインドは機能しますが、バインディング(Binding ElementName = "tbUserName")は機能しません。tbUserNameはdbInfo DockPanelのTextBlockです。これを正しくバインドする方法はありますか?

2

1 答え

あなたは2つの問題があるかもしれません...

NameScoping ...

ElementNameバインディングにはNameScopingに関する厳しい制限があります...

基本的に、ElementNameを使用すると   バインディングでは、ターゲットオブジェクトのNameScopeを使用して、   指定された名前の要素。その要素に   NameScope、特にFrameworkElement.FindScopeメソッド   論理ツリーを継承し、継承に戻る   論理的な親がない場合のコンテキスト。名前スコープは   すべての名前付きオブジェクトが登録されています。

そのため、あなたのケースでは、ツールヒントのコンテキスト外の参照要素は失敗します。これが正しく動作するようにするには、 Tag のようなものを使用して壊れたスコープを橋渡しする必要があります...

 
    
       
          
             
                 
                 

ツールヒントの可視性

ツールチップの可視性にバインドする代わりに、矩形そのものにマルチバインディングのデータトリガを使用して、条件値に基づいて必要なツールチップを設定することができます。

    
       
       
     

    <!-- Rest of the code --->

    
        
            
    

簡単にするために、 TooltipVisibilityConverter がブール値を返すようになりました。

0
追加された
@ピーターありがとう。それは正しい方向に私を指摘した。 Rectangleがツールチップの親チェーンではないように見えるため、はこのコンテキストでは動作しません。 PlacementTargetプロパティに保持されているようです。そこで、TagプロパティのTextBlockを設定する+あなたの素晴らしい提案と組み合わせて、 が問題を解決しました。データトリガーアプローチの原因を使用できません。その時点で TextBlackActualWidth が設定されていません。
追加された 著者 Harshana,