考虑下面的简单代码。
当我将鼠标悬停在任何项目上时,它会等待1秒,然后按预期显示工具提示。但是,如果我将鼠标移动到另一个项目而不退出列表,工具提示只会更新为新的项目名称,而不会重新触发显示延迟。这是正常行为吗?
每当鼠标进入一个新项目并重新触发显示延迟时,我需要在列表中移动鼠标时工具提示消失。有什么建议吗?
主窗口。xaml
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lcl="clr-namespace:WpfApplication"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="lcl:Item">
<TextBlock
Text="{Binding Name}"
HorizontalAlignment="Stretch"
ToolTipService.InitialShowDelay="1000"
ToolTipService.BetweenShowDelay="1000"
ToolTipService.HasDropShadow="True"
ToolTipService.HorizontalOffset="5"
ToolTipService.VerticalOffset="5">
<TextBlock.ToolTip>
<TextBlock Text="{Binding Name}" />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
主窗口。xaml。反恐精英
namespace WpfApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
_Items.Add(new Item() { Name = "First" });
_Items.Add(new Item() { Name = "Second" });
_Items.Add(new Item() { Name = "Third" });
}
public Collection<Item> _Items = new Collection<Item>();
public Collection<Item> Items
{
get { return _Items; }
}
}
public class Item
{
public string Name
{
get;
set;
}
}
}
我也看到了OP质疑的行为。我添加属性ToolTipService的全部原因。BetweenShowDelay是因为我认为它可以解决问题,但正如这里所说的,我们误解了它的作用。
也许这是WPF中的一个错误,因为即使没有设置
BetweenShowDelay
,当鼠标移动到另一个元素时,工具提示也会发生变化,而不是之前的工具提示关闭,然后等待打开新的。
我想知道这是否与使用数据模板有关?
这似乎和我预期的一样,也就是说,不要设置ToolTipService。Beween ShowDelay
属性:
<TextBlock
Text="{Binding Name}"
HorizontalAlignment="Stretch"
ToolTipService.InitialShowDelay="5000"
ToolTipService.HasDropShadow="True"
ToolTipService.HorizontalOffset="5"
ToolTipService.VerticalOffset="5">
<TextBlock.ToolTip>
<TextBlock Text="{Binding Name}" />
</TextBlock.ToolTip>
</TextBlock>
恐怕您误解了Between ShowDelay属性的工作原理。正如你在这里看到的:
在[……]例如,对于两个椭圆控件的工具提示,InitialShowDelay属性设置为1秒(1000毫秒),BetweenShowDelay设置为两秒(2000毫秒)。如果显示其中一个椭圆的工具提示,然后在两秒内将鼠标指针移动到另一个椭圆并在其上暂停,则第二个椭圆的工具提示将立即显示。
查看上面链接中的示例以了解更多详细信息。
所以——如你所见——你描述的是正常行为。
我在我的WordPress网站上使用JetPack,并启用了延迟加载。然而,在我的网站中,我用AJAX更新了一些内容,这导致加载1x1占位符的图像,而不是真正的图像,这是懒惰加载会处理的。 如何使用Jet Pack再次调用延迟加载?我似乎记得有一个JavaScript函数,但找不到它是什么。
尽管试图避免所有记录在案的陷阱,阻止React在状态更改后重新渲染,但我仍然无法解决我的问题: } 从每个长方体组件调用update函数,并触发长方体网格上新颜色的指定。 试图避免常见的错误: 颜色数组只有在通过扩展运算符从状态复制后才被修改 通过setState()传递新数组 此外,我还处理了两个组件中函数的实例绑定 但是,尽管onClick成功触发了状态更改,但不会进行重新渲染。我在这里缺少的
我真的很喜欢这个CSS工具提示的解决方案,我自己也用过一段时间了。但是我遇到了一个我以前从未遇到过的问题,多个工具提示的内容相互重叠,我不确定如何最好地解决它。 提到的解决方案基于管理绝对定位工具提示内容的
我在玩JavaFX的< code>Tooltip。我意识到对我个人来说,悬停在某个东西上和工具提示实际出现之间的延迟太长了。从API中可以看出: 通常,当鼠标移动到控件上时,工具提示被“激活”。工具提示从“激活”到实际显示之间通常会有一些延迟。细节(如延迟量等)留给皮肤实现。 经过进一步调查,我无法找到任何控制延迟的可能性。JavaFX CSS Reference没有关于延迟时间的信息,的运行时评
当我悬停在第一个Div上时,工具提示显示得比我悬停在下面两个Div上时更远。显然,这是因为div中的文本更大/更长。但是我不想显示不依赖于悬停文本的工具提示跨度,而是与文本的包含div相关,所以它总是显示在相同的位置。 jQuery不是任何选项,但我认为,这是一个CSS问题。 null null
该站点有带有动态内容的工具提示的链接。我正在使用jquery UI工具提示来显示它们。我不希望每次用户不小心将光标放在链接上时,都显示工具提示。我想要显示工具提示只有当它延迟光标在链接上几秒钟。这应该像Gmail一样,当你悬停在发件人的名字上时,你会看到关于他的信息(见图)。 我需要工具提示,用户可以与之交互,所以我使用了这段代码(感谢Antonimo https://stackoverflow.