棘手的约ToolTip
s是一个ToolTip
是你有控制关联的对象,而不是控件的可视化树的一部分。所以,你可以不填充它,你会填充在视觉树事物的方式,比如:你必须做的事情
<TextBox.ToolTip>
<StackPanel>
...put bound controls here
</StackPanel>
</TextBox.ToolTip>
相反,是创建一个工具提示的具体实例,并为其分配一个风格,设置它的DataContext
(非常重要;这就是如何绑定到其“展示目标”数据源的属性,即显示工具提示的控件)及其Template
。然后将ToolTip
的可视化树(包括绑定)放入模板中。最后,请参考您的控件中的ToolTip
。
所以,这里有一个TextBox
其Binding
并验证:
<TextBox ToolTip="{StaticResource ErrorToolTip}">
<TextBox.Text>
<Binding Source="SourceProperty">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
它使用该ToolTip
:
<ToolTip x:Key="ErrorToolTip" Style="{StaticResource ErrorToolTipStyle}"/>
而且ToolTip
使用这种风格,从的了ValidationError
属性获取其内容TextBox
的约束力来源:
<Style x:Key="ErrorToolTipStyle" TargetType="{x:Type ToolTip}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="DataContext" Value="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border
Name="Border"
BorderThickness="1"
BorderBrush="LightGray">
<StackPanel Orientation="Vertical">
<Label Background="Firebrick" Foreground="White" FontWeight="Bold" Margin="4">Validation error</Label>
<TextBlock Margin="10" Text="{Binding ValidationError}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" Value="true">
<Setter TargetName="Border" Property="CornerRadius" Value="4"/>
<Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不确定这一点,但我认为上述的实际必须设置的唯一部分是DataTrigger
设置DataContext
;我想大多数其他的东西都可以在ToolTip
的视觉树中明确设置。但我可能没有想到重要的事情。
什么会我更详尽的提示,虽然做的?一个在其中显示多个属性。 – Nathan 2010-02-06 06:00:28
http://stackoverflow.com/questions/1825765/wpf-show-data-from-multiple-datacontexts-in-tooltip-of-itemscontrol 指这个链接,将帮助你 – 2010-02-06 06:29:01