ビジュアルツリーの上にあるウィンドウにツールヒントのPlacementTargetを変更しようとしています。私はPlacementTargetを除いてすべてを魅了しました。 XAMLとコードの例を示します。どちらも動作しません。このスタイルは、現在TextBoxに添付されている単一のツールチップに使用されています。C#WPF:ツールチップのPlacementTargetを変更する
<Style TargetType="ToolTip">
<Setter Property="ToolTipService.PlacementTarget"
Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Grid }} }" />
</Style>
私は...コードに行くと、それが何かに添付いたらtooltip.PlacementTargetを見れば、それは常にテキストボックスに設定されています。私は、異なるUIElementsを取得するためにVisualTreeを使用する複数の方法を試みました。何も動作していないようです...私は何かを理解していないか、または見逃していないと仮定しています。
本当に私を得ることは、自分のコードに行き、ツールチップのPlacementTargetを見ると、他のものに設定することができないということです。たとえば:
var ancestors = toolTip.PlacementTarget.GetSelfAndAncestors();
foreach(var ancestor in ancestors)
{
if(var ancestor is Grid)
{
// Conditional always hits.
// Before this line, PlacementTarget is a TextBox.
toolTip.PlacementTarget = (UIElement)ancestor;
// After the line, PlacementTarget is still a TextBox.
}
}
私は間違っているのか、わからないのですか?
コンテキストの編集:カスタムクリッピングエフェクトは、基本的に、最も近い祖先ウィンドウをツールヒントのターゲットに配置し、それを使用してツールヒントがそのウィンドウの境界を超えないようにします。
WPFは、ツールチップが 'PlacementTarget'と' DataContext'で動作する方法がちょっと面倒です。それは速く設定します。 https://stackoverflow.com/questions/6783693/how-to-set-a-placementtarget-for-a-wpf-tooltip-without-messing-up-the-datacontex –
ビジュアルツリーの定義方法?ヒントは、独自のビジュアルツリーに存在し、親ウィンドウ内で何かを探すためにRelativeSourceを使用することはできません。 – mm8
@TimothyGrooteありがとう、私はそれをチェックアウトします。 mm8では、RelativeSourceの値が最初にデフォルトのターゲット(この場合はTextBox)をターゲットにし、ビジュアルツリーを上に移動して最初のグリッドを探します(ただし、AnscestorLevelを1に設定する必要があります)。しかし、PlacementTargetを実際に設定するための値を取得することはできません。 – user2079828