我有一个显示的用户控件TextBox
有一个小的帮助图标一起。
我的目标是有一个ToolTip
弹出,显示一些数据绑定文本,并保持开放,当鼠标悬停在帮助图标。
所以,为此我已创建在用户控件让我绑定的帮助文本字符串的用户控件帮助文件依赖项属性。
所以,我的用户控件看起来是这样的
<UserControl Name="textField" ...>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding ElementName=textField,Path=Text}"/>
<Image Source="{StaticResource Help.Icon}">
<Image.ToolTip>
<ToolTip Content="{Binding ElementName=textField,Path=HelpText}"/>
</Image.ToolTip>
</Image>
</StackPanel>
</UserControl>
此代码确实显示工具提示,除了它是空的! 此外,作为工具提示几秒钟后关闭的StaysOpen属性没有任何区别。
有趣的是,当我直接设置相同的结合影像控制的工具提示属性绑定文本在工具提示弹出好吧显示,但它仍然不能保持开放:
<Image Source="{StaticResource Help.Icon}" ToolTip="{Binding ElementName=textField,Path=HelpText}">
所以,我到的问题是:
- 如何来攻击用户控件的帮助文件依赖属性绑定不第一个代码示例中的工作,但确实在第二个工作?
- 如何让我的
ToolTip
继续开放,或者说我怎么做的ToolTip
都保持开放,并显示数据绑定文本?
谢谢!
工具提示是不一样的VisualTree为您的XAML的其余部分的一部分,所以DataContext
是不能继承的方式,你希望它是。
书写ToolTip="{Binding SomeProperty}"
将自动设置工具提示的DataContext
到SomeProperty
,但是如果你建立一个自定义的工具提示你必须自己做。
<ToolTip DataContext="{Binding PlacementTarget.DataContext,
RelativeSource={RelativeSource Self}}" ... />
这将工具提示的绑定DataContext
到DataContext
任何对象的工具提示上。
为了完成你想做什么,你的<ToolTip>
可能会是这样的,因为PlacementTarget
将是你的Image
:
<!-- Could also use something like Tag if DataContext is actually used -->
<Image DataContext="{Binding ElementName=textField, Path=HelpText}"
Source="{StaticResource Help.Icon}">
<Image.ToolTip>
<ToolTip Content="{Binding PlacementTarget.DataContext,
RelativeSource={RelativeSource Self}}"/>
</Image.ToolTip>
</Image>
至于为什么它不会继续开放,我还不能肯定,但它可能是因为ToolTipService.ShowDuration属性默认为5秒,这可能会覆盖StaysOpen
财产。
您可以尝试将其设置为更高的东西,如
<Image ToolTipService.ShowDuration="60000" ... />
或者你可以尝试这种解决方法使用的Popup
风格,看起来像一个ToolTip
来代替。 该代码可能会是这个样子:
<Popup PlacementTarget="{Binding ElementName=MyImage}"
IsOpen="{Binding IsMouseOver, ElementName=MyImage, Mode=OneWay}">
<TextBlock Text="{Binding ElementName=textField, Path=HelpText}" />
</Popup>