0

ポップアップを動的に作成し、表示ツリーの最初の子に追加するポップアップ コントロールを WPF で作成しました。ポップアップのコンテンツ (PopupContent) 内で、バインドは機能しますが、要素のバインドが壊れているようです。

私はポップアップを作成している途中でこれを非難しています。ポップアップのコンテンツ内の要素バインディングが期待どおりに機能するように、これを修正する方法はありますか?

popupContainer = new PopupContainer();
popupContainer.Content =   PopupContent;
PopupContent.Visibility = Visibility.Visible;
rootContent.Children.Add(popupContainer);
4

1 に答える 1

1

ポップアップコントロールには個別のものVisualTreeがあり、メインのWindow / UserControlの一部ではないVisualTreeため、Elementnameバインディングは機能しません。

ポップアップコントロールには、独自のビジュアルツリーはありません。代わりに、ポップアップのMeasureOverrideメソッドが呼び出されると、サイズ0(ゼロ)が返されます。ただし、PopupのIsOpenプロパティをtrueに設定すると、独自のビジュアルツリーを持つ新しいウィンドウが作成されます。新しいウィンドウには、ポップアップの子コンテンツが含まれています。

http://msdn.microsoft.com/en-us/library/ms749018.aspx#PopupandtheVisualTree

試すことができるのは、ContextMenusで一般的に使用される回避策です。つまり、ウィンドウ/UserControlと同じネームスコープにポップアップを追加します-

popupContainer = new PopupContainer();       
popupContainer.Content =   PopupContent;       
PopupContent.Visibility = Visibility.Visible;       
rootContent.Children.Add(popupContainer);  
NameScope.SetNameScope(popupContainer, NameScope.GetNameScope(this)); //Or
// NameScope.SetNameScope(popupContainer, NameScope.GetNameScope(rootContent)); 
于 2012-07-12T10:14:12.330 に答える