这是我工作提示的XAML
代码:
<DataTrigger Binding="{Binding Visibility,ElementName=txtParent}" Value="Visible">
<Setter Property="StackPanel.ToolTip" Value="{Binding Text,ElementName=txtParent}" TargetName="PanelTitle">
</Setter>
</DataTrigger>
现在我想要一个具有最大宽度和文字包装的工具提示。我尝试使用以下代码,但它没有用:
<DataTrigger Binding="{Binding Visibility,ElementName=txtParent}" Value="Visible">
<Setter Property="StackPanel.ToolTip" TargetName="PanelTitle">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToolTip}">
<StackPanel Margin="7,1">
<TextBlock Text="{Binding Text,ElementName=txtParent}" Margin="1" HorizontalAlignment="Center" Width="200" TextWrapping='Wrap' VerticalAlignment="Top" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
答案 0 :(得分:2)
视觉树中不存在ToolTip
,就像您期望的那样。它在运行时不参与继承上下文或“owner”元素的名称范围。我猜你的绑定无法在运行时解析txtParent
因为它不知道在哪里看。
您可以尝试使用ElementName=txtParent
替换绑定中的Source={x:Reference txtParent}
,这会强制在解析阶段解析名称,此时名称仍在范围内。它可能有用,也可能没有,但无论哪种方式都可能会破坏XAML设计师。
此外,您要将ToolTip
的值设置为ControlTemplate
,这没有多大意义。您应该将其设置为ToolTip
实例(或其他一些内容类型):
<Setter.Value>
<ToolTip>
<StackPanel Margin="7,1" >
<TextBlock Text="{Binding Text,Source={x:Reference txtParent}}"
Margin="1"
HorizontalAlignment="Center"
Width="200"
TextWrapping="Wrap"
VerticalAlignment="Top" />
</StackPanel>
</ToolTip>
</Setter.Value>
可能工作的另一个方法是将ToolTip
作为资源存储在范围内的某个位置,并让Setter
为其分配StaticResource
引用。通常,使用UI元素作为共享资源是容易出错并被认为是不好的做法,但在应用程序中的任何给定时间只能加载一个ToolTip
,它可能会起作用:
<FrameworkElement.Resources>
<ToolTip x:Key="MyToolTip">
<StackPanel Margin="7,1" >
<TextBlock Text="{Binding Text,Source={x:Reference txtParent}}"
Margin="1"
HorizontalAlignment="Center"
Width="200"
TextWrapping="Wrap"
VerticalAlignment="Top" />
</StackPanel>
</ToolTip>
</FrameworkElement.Resources>
<!-- ... -->
<DataTrigger Binding="{Binding Visibility, ElementName=txtParent}"
Value="Visible">
<Setter Property="StackPanel.ToolTip"
Value="{StaticResource MyToolTip}"
TargetName="PanelTitle" />
</DataTrigger>
但是,如果您正在使用MVVM,那么最简单(也可能是最好的)操作就是将txtParent.Text
绑定到视图模型上的属性;然后,您可以使用the technique from this other answer绑定到ToolTip
的同一媒体资源。