考虑以下简单代码。
当我将鼠标悬停在任何项目上时,它会等待1秒钟然后按预期显示工具提示。但是,如果我将鼠标移动到另一个项目而不退出列表,则工具提示只会更新到新项目名称而不会重新触发显示延迟。这是正常行为吗?
当输入新项目并重新触发显示延迟时,我需要在列表中移动鼠标时工具提示消失。有什么建议吗?
MainWindow.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>
MainWindow.xaml.cs
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;
}
}
}
答案 0 :(得分:2)
我担心你误解了BetweenShowDelay
属性是如何运作的。正如您可以阅读here:
在[...]示例中,InitialShowDelay属性设置为1 秒(1000毫秒)和BetweenShowDelay设置为2 两个Ellipse控件的工具提示的秒数(2000毫秒)。 如果显示其中一个省略号的工具提示,然后移动 鼠标指针在两秒钟内指向另一个椭圆并在其上暂停, 第二个椭圆的工具提示立即显示。
请查看上面链接中的示例以获取更多详细信息。
所以 - 正如你所看到的 - 你描述的是正常行为。
答案 1 :(得分:0)
这似乎对我有用,即不设置ToolTipService.BetweenShowDelay
属性:
<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>
答案 2 :(得分:0)
我还看到了OP在质疑的行为。我添加属性ToolTipService.BetweenShowDelay
的全部原因是因为我认为它会修复问题,但是正如这里所说的,我们误会了它的作用。
这也许是WPF中的一个错误,因为即使不设置BetweenShowDelay
,鼠标移动到另一个元素的瞬间,工具提示也会改变,而不是先前的工具提示关闭然后等待打开新的提示。 / p>
我想知道是否与使用数据模板有关?