2017-08-27 19 views
0

必要に応じて "Minimal, Complete and Verifiable" -カスタムコントロールでRelativeSourceを使用してToolTipコンテンツをバインドする適切な方法は何ですか?

これは問題を再現するための "カスタムコントロール"です。

XAML:

<TextBlock 
    x:Class="FooTips.FooTipControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:l="clr-namespace:FooTips" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    d:DesignHeight="300" d:DesignWidth="300" mc:Ignorable="d" 
    Text="{Binding FooTipText, RelativeSource={RelativeSource Self}}"> 
    <TextBlock.ToolTip> 
     <ToolTip Content="{Binding FooTipText, RelativeSource={RelativeSource AncestorType={x:Type l:FooTipControl}, Mode=FindAncestor}}" /> 
    </TextBlock.ToolTip> 
</TextBlock> 

コード:

using System.Windows; 

namespace FooTips { 
    /// <summary> 
    /// Interaction logic for FooTipControl.xaml 
    /// </summary> 
    public partial class FooTipControl { 
     public static readonly DependencyProperty 
      FooTipTextProperty = DependencyProperty.Register(
       "FooTipText", typeof(string), typeof(FooTipControl)); 

     public FooTipControl() { 
      InitializeComponent(); 
     } 

     public string FooTipText { 
      get => this.GetValue(FooTipTextProperty).ToString(); 
      set => this.SetValue(FooTipTextProperty, value); 
     } 
    } 
} 

ウィンドウにドロップ(または何でも)とFooTipText = "FOO"(または何でも)を設定します。

コントロールのテキスト表示されますが、ビルド出力を表示し、次のバインディングエラー -

System.Windows.Data Error: 4 : 
    Cannot find source for binding with reference 
     'RelativeSource FindAncestor, 
     AncestorType='FooTips.FooTipControl', 
     AncestorLevel='1''. 
    BindingExpression: 
     Path=FooTipText; 
     DataItem=null; 
     target element is 'ToolTip' (Name=''); 
     target property is 'Content' (type 'Object') 

は、どのように私はそれをコントロールプロパティにピックアップするように、私のツールチップが結合調整することができますか?

答えて

2

これは動作します:

<TextBlock x:Class="FooTips.FooTipControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:l="clr-namespace:FooTips" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      d:DesignHeight="300" d:DesignWidth="300" mc:Ignorable="d" 
      Text="{Binding FooTipText, RelativeSource={RelativeSource Self}}" 
      ToolTip="{Binding FooTipText, RelativeSource={RelativeSource Self}}"> 
</TextBlock> 

...、あまりにもこの:

<TextBlock.ToolTip> 
    <ToolTip Content="{Binding PlacementTarget.FooTipText, RelativeSource={RelativeSource Self}}" /> 
</TextBlock.ToolTip> 
+0

そして、そこにはあるが。優れた。ありがとうございます。 – Will