C# 如何使用C而不是XAML为WPF中的文本框制作工具提示

C# 如何使用C而不是XAML为WPF中的文本框制作工具提示,c#,wpf,xaml,C#,Wpf,Xaml,我想制作一个工具提示,在5秒钟后或当用户再次点击文本框时,工具提示会出现,然后消失,但是如果用户将鼠标移动或移动到文本框上,工具提示不会在5秒钟之前消失 这是我的代码,我正在检查以防止用户在txtName文本框中键入这些字符,当用户写入其中任何字符时,它会将其替换为“”,然后我想立即显示工具提示,该提示应在5秒后消失,但在这段代码中,SetShowDuration不起作用,工具提示将出现并永久保留 private void txtName_TextChanged(object s

我想制作一个工具提示,在5秒钟后或当用户再次点击文本框时,工具提示会出现,然后消失,但是如果用户将鼠标移动或移动到文本框上,工具提示不会在5秒钟之前消失

这是我的代码,我正在检查以防止用户在txtName文本框中键入这些字符,当用户写入其中任何字符时,它会将其替换为“”,然后我想立即显示工具提示,该提示应在5秒后消失,但在这段代码中,SetShowDuration不起作用,工具提示将出现并永久保留

        private void txtName_TextChanged(object sender, EventArgs e)
    {
        if (Regex.IsMatch(txtName.Text, @"[\\/:*?""<>|]"))
        {
            string pattern = @"[\\/:*?""<>|]";
            Regex regex = new Regex(pattern);
            txtName.Text = regex.Replace(txtName.Text, "");

            ToolTip toolTip = new ToolTip();
            toolTip.Content = @"The file name can't contain any of the following characters: \ / : * ? "" < > |";
            toolTip.IsOpen = true;
            ToolTipService.SetToolTip(toolTip, txtName);
            ToolTipService.SetShowDuration(toolTip, 1000);
        }
    }
private void txtName\u TextChanged(对象发送方,事件参数e)
{
if(Regex.IsMatch(txtName.Text,@“[\\/:*?”“\124;]”)
{
字符串模式=@“[\\/:*?”“\;]”;
正则表达式正则表达式=新正则表达式(模式);
txtName.Text=regex.Replace(txtName.Text,“”);
工具提示工具提示=新工具提示();
toolTip.Content=@“文件名不能包含以下任何字符:\/:*?”<>|“;
toolTip.IsOpen=true;
SetToolTip(toolTip,txtName);
设置显示持续时间(工具提示,1000);
}
}
对于这样的“定制”工具提示,我建议您考虑使用A来获得更大的灵活性。您可以使用其
IsOpen
属性来决定何时显示和隐藏“工具提示”

在这种情况下,您可以使用一个定时器,在5秒后将
IsOpen
设置为false:

await Task.Delay(5000):
popup.IsOpen = false;

这称为验证,请参阅(例外验证规则)。谢谢,它工作得很好,我不知道弹出功能已经存在。