Getting a tooltip in a user control to show databound text and stay open

后端 未结 1 816
小蘑菇
小蘑菇 2020-12-18 14:29

I have a user control that shows a TextBox along with a small help icon.

My goal is to have a ToolTip pop-up, show some databound text and

相关标签:
1条回答
  • 2020-12-18 14:59

    ToolTips are not part of the same VisualTree as the rest of your XAML, so the DataContext is not inherited the way you would expect it to be.

    Writing ToolTip="{Binding SomeProperty}" will automatically set the ToolTip's DataContext to SomeProperty, however if you build a custom ToolTip you must do this yourself.

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

    This will bind the ToolTip's DataContext to the DataContext of whatever object the ToolTip is on.

    To accomplish what you're trying to do, your <ToolTip> would probably look like this, since PlacementTarget would be your 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>
    

    As for why it won't stay open, I'm not positive but it might be because the ToolTipService.ShowDuration property defaults to 5 seconds, and that probably overwrites the StaysOpen property.

    You can try setting it to something higher, such as

    <Image ToolTipService.ShowDuration="60000" ... />
    

    Or you can try this workaround of using a Popup styled to look like a ToolTip instead. The code would probably look something like this:

    <Popup PlacementTarget="{Binding ElementName=MyImage}" 
           IsOpen="{Binding IsMouseOver, ElementName=MyImage, Mode=OneWay}">
        <TextBlock Text="{Binding ElementName=textField, Path=HelpText}" />
    </Popup>
    
    0 讨论(0)
提交回复
热议问题