得到一个提示用户控件来显示数据绑定文本,并保持开放(Getting a tooltip in a u

2019-07-19 13:39发布

我有一个显示的用户控件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}">

所以,我到的问题是:

  1. 如何来攻击用户控件的帮助文件依赖属性绑定不第一个代码示例中的工作,但确实在第二个工作?
  2. 如何让我的ToolTip继续开放,或者说我怎么做的ToolTip都保持开放,并显示数据绑定文本?

谢谢!

Answer 1:

工具提示是不一样的VisualTree为您的XAML的其余部分的一部分,所以DataContext是不能继承的方式,你希望它是。

书写ToolTip="{Binding SomeProperty}"将自动设置工具提示的DataContextSomeProperty ,但是如果你建立一个自定义的工具提示你必须自己做。

<ToolTip DataContext="{Binding PlacementTarget.DataContext, 
        RelativeSource={RelativeSource Self}}" ... />

这将工具提示的绑定DataContextDataContext任何对象的工具提示上。

为了完成你想做什么,你的<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>


文章来源: Getting a tooltip in a user control to show databound text and stay open