首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将工具提示绑定到Content Presenter内容

将工具提示绑定到Content Presenter内容
EN

Stack Overflow用户
提问于 2013-01-31 10:05:08
回答 3查看 2.7K关注 0票数 4

我正在设计TreeViewItem的样式。该项目有一个我希望显示工具提示的内容展示者:

代码语言:javascript
复制
<ContentPresenter x:Name="PART_Header"
             Cursor="Hand"
             Grid.Column="1"
             ContentSource="Header"
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
   <ContentPresenter.ToolTip>
       <ToolTip 
                 Placement="RelativePoint" 
                 VerticalOffset="-2" 
                 HasDropShadow="False"
                 BorderBrush="#767676" 
                 Background="#FFF" 
                 Padding="0,1,0,1"
                 VerticalAlignment="Center"
                 Content="{Binding RelativeSource={RelativeSource FindAncestor, 
                 AncestorType={x:Type ContentPresenter}}, Path=Content}"/>
   </ContentPresenter.ToolTip>
</ContentPresenter>

这实际上是设置项的控件模板的较大setter的一部分。但是,我似乎无法将工具提示的内容绑定到内容提示者的内容。它一直看起来是空白的(一个小黑盒)。我刚接触binding和WPF,所以请原谅。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-31 10:20:22

ToolTips和其他弹出窗口存在于主视觉树之外,因此不能使用RelativeSource访问父级。请尝试使用工具提示的PlacementTarget属性转到其父ContentPresenter:

代码语言:javascript
复制
Content="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.Content}"
票数 6
EN

Stack Overflow用户

发布于 2016-06-23 17:19:15

我想使用绑定,就像我的工具提示或弹出窗口是创建它们的控件的子控件一样。在前面的回答中,我不能这样做。我为自定义工具提示编写了示例,但您也可以为弹出窗口、使用行为或其他工具编写示例-这很简单。我的自定义ToolTip:

代码语言:javascript
复制
public class ToolTipEx : ToolTip
{
    private readonly FrameworkElement _coreParent;

    static ToolTipEx()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(ToolTipEx), new FrameworkPropertyMetadata(typeof(ToolTipEx)));
    }

    public ToolTipEx(FrameworkElement parent)
    {
        _coreParent = parent;
    }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        var method = typeof(FrameworkElement).GetMethod("AddLogicalChild", BindingFlags.Instance | BindingFlags.NonPublic);
        method.Invoke(_coreParent, new object[] { Parent });
    }
}

之后,您可以使用正确的绑定:

代码语言:javascript
复制
<Style TargetType="{x:Type controls:ToolTipEx}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToolTip}">
                <Border Background="Black"
                        CornerRadius="3">
                    <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:MyControl}}, Path=MyProperty}"
                               Margin="1"
                               Foreground="#FFFFFF"
                               FontWeight="Bold"
                               TextTrimming="CharacterEllipsis"
                               TextWrapping="NoWrap"
                               TextAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
票数 0
EN

Stack Overflow用户

发布于 2021-10-18 18:02:11

我不明白为什么你只是将绑定添加到tooltip属性本身?

代码语言:javascript
复制
<ContentPresenter ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Content}">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14617290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档