如何为工具提示设置样式的 InitialShowDelay?

How to set the InitialShowDelay of a style for a tooltip?

我正在尝试为工具提示设置样式延迟。为此,我使用了依赖项 属性.

这是风格:

<Style TargetType="ToolTip" x:Key="ToolTipDefaultStyle">
    <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    <Setter Property="ToolTipService.InitialShowDelay" Value="{Binding PlacementTarget.(ap:ToolTipAttachedProperty.InitialShowDelay), RelativeSource={RelativeSource AncestorType=ToolTip}}"/>
    <Setter Property="ToolTipService.ShowDuration" Value="{Binding PlacementTarget.(ap:ToolTipAttachedProperty.ShowDuration), RelativeSource={RelativeSource AncestorType=ToolTip}}"/>
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding PlacementTarget.(ap:ToolTipAttachedProperty.Texto), RelativeSource={RelativeSource AncestorType=ToolTip}}"  MaxWidth="400" TextWrapping='Wrap' />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

这是观点:

<StackPanel Name="spTiposIva" Orientation="Vertical" Margin="5,0,0,0"
            ap:ToolTipAttachedProperty.Texto="{Binding TiposIvaTooltip}"
            ap:ToolTipAttachedProperty.InitialShowDelay="10000"
            ap:ToolTipAttachedProperty.ShowDuration="{StaticResource TooltipDisplayTime}">
    <StackPanel.ToolTip>
        <ToolTip Style="{StaticResource ToolTipDefaultStyle}"/>
    </StackPanel.ToolTip>
</StackPanel>

文本显示正确,但初始显示延迟是默认值,不会延迟 10 秒。

如何设置延迟?

谢谢。

其他属性,例如ShowOnDisabled 也不行。这是因为您在 ToolTip 本身或以它为目标的样式中设置了附加的 ToolTipService 属性。相反,您必须在工具提示关联的控件上设置这些属性,而不是工具提示本身

如果您直接将它们附加到 StackPanel 或以适合它的样式,它将起作用,例如:

<StackPanel Name="spTiposIva" Orientation="Vertical" Margin="5,0,0,0"
            ToolTipService.ShowOnDisabled="True"
            ToolTipService.InitialShowDelay="10000"
            ToolTipService.ShowDuration="{StaticResource TooltipDisplayTime}"
            ToolTip="Binding TiposIvaTooltip">
   <!-- ...your content. -->
</StackPanel>

您可以直接将工具提示服务属性附加到控件。您不需要为 ToolTipService 已经提供的相同内容创建自己的附加属性。这似乎是一种间接级别,但您可以做到。您可以在下面找到有效样式的示例。

在上面的示例中,您可以拆分 ToolTip 样式并为 StackPanel 创建样式。

<Style TargetType="{x:Type StackPanel}" x:Key="StackPanelDefaultStyle">
   <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
   <Setter Property="ToolTipService.InitialShowDelay" Value="{Binding (ap:ToolTipAttachedProperty.InitialShowDelay), RelativeSource={RelativeSource Self}}"/>
   <Setter Property="ToolTipService.ShowDuration" Value="{Binding (ap:ToolTipAttachedProperty.ShowDuration), RelativeSource={RelativeSource Self}}"/>
</Style>
<Style TargetType="ToolTip" x:Key="ToolTipDefaultStyle">
   <Setter Property="ContentTemplate">
      <Setter.Value>
         <DataTemplate>
            <StackPanel>
               <TextBlock Text="{Binding PlacementTarget.(ap:ToolTipAttachedProperty.Texto), RelativeSource={RelativeSource AncestorType=ToolTip}}"  MaxWidth="400" TextWrapping='Wrap' />
            </StackPanel>
         </DataTemplate>
      </Setter.Value>
   </Setter>
</Style>

另一种方法可能是创建其他控件样式所基于的基本样式。它与 StackPanel 的样式相同,但将 FrameworkElement 作为目标类型应用于所有控件。

<Style TargetType="{x:Type FrameworkElement}" x:Key="FrameworkElementDefaultStyle">