如何将工具提示数据绑定到用户控件的一部分?

时间:2012-11-05 17:51:04

标签: c# .net wpf xaml

我知道这个问题之前已被问过很多次了,我已经在网上找到了一些解决方案,但我无法让它们起作用。我在自定义控件上有一些元素,我想在其中一个上添加一个绑定的工具提示。这是我到目前为止所做的。

<UserControl x:Class="DirectGraphicsControl.ColorBarView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:DirectGraphicsControl="clr-namespace:Windows.DirectGraphicsControl" mc:Ignorable="d" 
         SizeChanged="UserControlSizeChanged" MinWidth="95">
<DockPanel LastChildFill="True" Width="80" x:Name="_mainDockPanel">
    <TextBlock DockPanel.Dock="Top" x:Name="_title" x:FieldModifier="public" HorizontalAlignment="Center" Margin="0,2,0,2"/>
    <StackPanel Orientation="Vertical" DockPanel.Dock="Bottom" Margin="0,2,0,2"
                    x:Name="_bottomLabelsRegion" x:FieldModifier="public">
        <TextBlock x:Name="_unitName" x:FieldModifier="public" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
    </StackPanel>
    <Grid DataContext="{Binding ElementName=_mainDockPanel.Parent, Path=MyTooltip}" >
        <DirectGraphicsControl:DirectGraphicsControl x:Name="_directGraphicsControl"
                                                     MouseDoubleClick="HandleColorBarMouseDoubleClick" x:FieldModifier="public">
            <DirectGraphicsControl:DirectGraphicsControl.ToolTip>
                <ToolTip Content="{Binding Path=PlacementTarget.DataContext, 
                                   RelativeSource={RelativeSource Self}}"/>
            </DirectGraphicsControl:DirectGraphicsControl.ToolTip>
        </DirectGraphicsControl:DirectGraphicsControl>
    </Grid>
</DockPanel>

这就是背后的代码。

/// <summary>
    /// The tool tip text
    /// </summary>
    public static readonly DependencyProperty TooltipProperty =
        DependencyProperty.Register(Reflection.GetPropertyName<ColorBarView>(m => m.MyTooltip),
                                    typeof(string), typeof(ColorBarView));

    /// <summary>
    /// The tool tip text
    /// </summary>
    public string MyTooltip
    {
        get { return "Test from binding"; }
    }

后面的代码属性只返回一个硬编码的字符串,直到我真正能够使它工作,然后它将返回我想要的计算值。目前鼠标悬停在空框上。当我将工具提示的文本直接添加到xaml时,它显示正常。这让我觉得它无法找到绑定的位置。

我对wpf很新,所以任何建议都会很棒。

谢谢,

2 个答案:

答案 0 :(得分:1)

查看Visual Studio输出选项卡。 XAML绑定错误打印在那里,应该很容易从那里发现问题。

答案 1 :(得分:1)

尝试将依赖项属性更改为:

 public static readonly DependencyProperty TooltipProperty =
    DependencyProperty.Register(Reflection.GetPropertyName<ColorBarView>(m => m.MyTooltip),
                                typeof(string), typeof(ColorBarView),new PropertyMetadata("Test Value") );

和绑定到:

<Grid DataContext="{Binding ElementName=_myControl, Path=MyTooltip}" >