如何在 WPF C# 中设置与父控件相同的工具提示字体

How to set the font of a ToolTip same as parent control in WPF C#

我有很多字段使用了不同的字体。当我将鼠标悬停在某个字段上时,它始终显示具有默认字体的工具提示。
但是我想将 ToolTip 字体设置为与鼠标悬停在其上的字段相同。
我该怎么做?

工具提示的样式如下:

    <Style TargetType="ToolTip">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding}"
                               MaxWidth="400"
                               TextWrapping='Wrap' />
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="Content" Value="{x:Static sys:String.Empty}">
                <Setter Property="Visibility" Value="Collapsed" />
            </Trigger>
            <Trigger Property="Content" Value="{x:Null}">
                <Setter Property="Visibility" Value="Collapsed" />
            </Trigger>
        </Style.Triggers>
    </Style>

这里是XAML的主要内容:

    <TextBox Text="Hello there!"
             FontFamily="Cambria"
             ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}" />

此方法有效 generic:

    <Style TargetType="ToolTip">
        <Setter Property="FontFamily" Value="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.FontFamily}"/>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding}"
                           MaxWidth="400"
                           TextWrapping='Wrap' />
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

预览

您可以使用此代码,但它仅适用于 TextBox

<DataTemplate>
    <TextBlock Text="{Binding}"
        MaxWidth="400"
        FontFamily="{Binding FontFamily, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}}"
        TextWrapping='Wrap' />
</DataTemplate>

ToolTip 具有 PlacementTarget 属性(UIElement,它是 ToolTip 控件(TextBox、TextBlock 等)的逻辑父级)。创建绑定到 PlacementTarget.FontFamily

的 FontFamily
<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <TextBlock Text="{Binding}"
                       FontFamily="{Binding RelativeSource={RelativeSource AncestorType=ToolTip}, Path=PlacementTarget.FontFamily}"
                       MaxWidth="400"
                       TextWrapping='Wrap' />
        </DataTemplate>
    </Setter.Value>
</Setter>