3

私はこの質問が以前に何度も尋ねられたことを知っています、私はここでいくつかの解決策をオンラインで見つけました、しかし私はそれらのどれも機能させることができませんでした。カスタムコントロールにいくつかの要素があり、そのうちの1つにバインドされたツールチップを配置したいと思います。これは私がこれまでに持っているものです。

<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に非常に慣れていないので、どんな提案も素晴らしいでしょう。

ありがとうございました、

4

2 に答える 2

1

VisualStudioの[出力]タブを確認します。XAMLバインディングエラーはそこに出力され、そこから問題を簡単に特定できるはずです。

于 2012-11-05T17:54:17.983 に答える
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}" >
于 2012-11-05T19:09:23.467 に答える