从指定为字符串的工具提示生成用户界面

时间:2014-07-05 06:42:57

标签: c# wpf

我们说我在XAML中指定了ToolTip这样的内容:

<TextBlock Text="Smurf">
    <TextBlock.ToolTip>
        <ToolTip>
            <TextBlock Text="Muppet" />
        </ToolTip>
    </TextBlock.ToolTip>
</TextBlock>

从后面的代码中,我可以像这样检索ToolTip

var tooltip = textBlock.ToolTip as ToolTip;

现在,我要直接在ToolTip上指定TextBlock

<TextBlock Text="Smurf" ToolTip="Muppet" />

当我以相同方式检索ToolTip时,工具提示为null,因为它是string

问题:如何将此string转换为ToolTip

我正在寻找的是ItemContainerGenerator.ContainerFromItem()的兄弟,它将对象转换为ItemsControls的用户界面项。

更新

我相信我在PopupControlService找到了相应的WPF代码...不幸的是,不是很可重用:

private void RaiseToolTipOpeningEvent()
{
    // ...

    object tooltip = ToolTipService.GetToolTip(o);
    ToolTip tip = tooltip as ToolTip;
    if (tip != null)
    {
        _currentToolTip = tip;
        _ownToolTip = false;
    }
    else if ((_currentToolTip == null) || !_ownToolTip)
    {
        _currentToolTip = new ToolTip();
        _ownToolTip = true;
        _currentToolTip.SetValue(ServiceOwnedProperty, BooleanBoxes.TrueBox);

        // Bind the content of the tooltip to the ToolTip attached property
        Binding binding = new Binding();
        binding.Path = new PropertyPath(ToolTipService.ToolTipProperty);
        binding.Mode = BindingMode.OneWay;
        binding.Source = o;
        _currentToolTip.SetBinding(ToolTip.ContentProperty, binding);
    }

    // ...
}

2 个答案:

答案 0 :(得分:0)

您无法将字符串转换为工具提示,您可以做的是在代码后面创建一个新的工具提示并设置这样的内容,

 string str = ((TextBlock)sender).ToolTip.ToString();
 ToolTip tip = new ToolTip();
 tip.Content = str;

答案 1 :(得分:0)

OP在这里。

我问了一个类似的问题here。它包含许多与此问题相关的信息。 accepted answer也可以用于此问题。