1

WPF DataGridにツールチップを表示していますが、データを含むセルのサイズより大きくならないようにツールチップの幅をカスタマイズしたいと思います。パスを「幅」と「実際の幅」に設定しようとしましたが、両方が無視されます。私は何が間違っているのですか?

<DataGridTextColumn Binding="{Binding Description}" Header="Message" Width="*">
<DataGridTextColumn.ElementStyle>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="TextTrimming" Value="CharacterEllipsis" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="ToolTipService.ShowDuration" Value="60000" />
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <TextBlock TextWrapping="Wrap"
                            Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}, Path=ActualWidth}"
                            Text="{Binding Description}" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
4

1 に答える 1

1

私はこれが機能しない理由を説明するのに役立つことを発見しました、

バインディングエラーをランタイム例外に変換するにはどうすればよいですか?

だからあなたはこれを追加します、

public class BindingErrorListener : TraceListener
{
    private Action<string> logAction;
    public static void Listen(Action<string> logAction)
    {
        PresentationTraceSources.DataBindingSource.Listeners
            .Add(new BindingErrorListener() { logAction = logAction });
    }
    public override void Write(string message) { }
    public override void WriteLine(string message)
    {
        logAction(message);
    }
}

そして、これをコードビハインドに追加します。

BindingErrorListener.Listen(m => MessageBox.Show(m));
InitializeComponent();

つまり、基本的にその結果、コードにバインディングエラーが含まれます。

Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGridCell', AncestorLevel='1''. BindingExpression:Path=ActualWidth; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Width' (type 'Double')

DataGridTextColumnにカーソルを合わせる前にバインディングエラーが発生するため、TextBoxがビジュアルツリーに追加される前にバインディングが作成されているので、祖先などがありません。

これまでのところ、これは問題が存在する理由を示していますが、解決策を見つけることができません。

于 2012-05-22T02:50:13.153 に答える