你可以直接将简单的将控件的某个属性和Tooltip 进行绑定。但是如果Tooltip 的内容是自定义的的,如何使用数据绑定呢?
假设你的Tooltip 的内容中包含了若干个Label,而你想其中某个Label的内容显示的是父控件某个属性的值。
你可以像下面的代码一样使用Tooltip 的PlacementTarget 附加属性来找到父级,然后设置Tooltip的DataContext 属性来进行绑定。
<TextBox Text="Now is the winter of our discontent etc"
Width="100" Margin="10">
<TextBox.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<StackPanel>
<Label FontWeight="Bold" Content="Full Text"/>
<Label Content="{Binding Text}"/>
<Label Content="--Gloster, in Richard III (Act I, Scene I)"/>
</StackPanel>
</ToolTip>
</TextBox.ToolTip>
</TextBox>
显示效果如下:
***********************************************************译者注***************************************************
PlacementTarget 属性表示获取或设置放置工具提示的对象。上文中提到的ToolTip的父控件其实就是需要放在ToolTip控件。
RelativeSource 属性可以通过指定绑定源相对于绑定目标的位置,获取或设置绑定源。此属性通常用于将对象的某个属性绑定到该对象的另一个属性,或用于在样式或模板中定义绑定。在上面的例子中ToolTip通过RelativeSource 属性将自己的PlacementTarget 属性绑定到DataContext 属性。
在XAML中RelativeSource 可以有一下几种
-Self:引用设置绑定的元素,并允许将该元素的一个属性绑定到同一元素中的其他属性。
-TemplatedParent:引用应用了模板(其中有数据绑定元素)的元素。这类似于设置 TemplateBindingExtension,并仅当绑定在模板中时适用。
-PreviousData:允许绑定所显示数据项列表中以前的数据项(不是包含数据项的控件)。
-FindAncestor:引用数据绑定元素父链中的上级。可以使用它绑定到特定类型或其子类的上级。如果您要指定AncestorType 和/或 AncestorLevel,可以使用此模式。