绑定到 Window 的标题并不总是有效

Binding to the Title of a Window does not always work

我需要将两个 TextBlock 数据绑定到 Window.Title 属性。第一个工作通过:

RelativeSource FindAncestor, AncestorType=Window}"

但是第二个没有(它深深地嵌套在一个按钮中 ToolTip)。

如何更改第二个,使其也显示 WindowTitle

<Window ...>
   <Border ...>
      <Grid ...>
         <Grid ...>
            <!-- TEXTBLOCK BELOW WORKS -->
            <TextBlock Grid.Column="2" Text="{Binding Title, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
                       HorizontalAlignment="Stretch" VerticalAlignment="Center" Foreground="White" FontSize="18px" FontStretch="UltraExpanded" />
            <Button Grid.Column="3" HorizontalAlignment="Right" VerticalAlignment="Stretch"
                    Background="Transparent" BorderBrush="Transparent" Foreground="Transparent"
                    ToolTipService.InitialShowDelay="0" ToolTipService.BetweenShowDelay="0" ToolTipService.ShowDuration="60000">
               <Button.ToolTip>
                  <ToolTip x:Name="helpButtonTooltip" Width="240" ToolTipService.InitialShowDelay="0">
                     <!-- TEXTBLOCK BELOW DOES NOT WORK; HOW CAN I MAKE IT WORK? -->
                     <TextBlock Text="{Binding Title, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
                                HorizontalAlignment="Stretch" VerticalAlignment="Center" Foreground="White" FontSize="18px" FontStretch="UltraExpanded" />

工具提示显示在弹出窗口中,与按钮或您的 window 不属于同一可视树。因此,RelativeSourceElementName 绑定不起作用。

您可以将 window 标题绑定到 Tag property of your button and then bind the Text of the tool tip TextBlock to the Tag property of the PlacementTarget(即按钮)。

<Button Tag="{Binding Title, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}">
   <Button.ToolTip>
      <ToolTip>
         <TextBlock Text="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>
      </ToolTip>
   </Button.ToolTip>
</Button>