Wpf多个工具提示staysopen属性不起作用

时间:2016-09-26 07:41:46

标签: wpf tooltip

如果我只创建一个工具提示并将其keepsopen属性设置为false,则其工作正常。但是,如果我创建多个工具提示并将其staysopen属性设置为false,则只有在鼠标单击后我创建的第一个工具提示才会关闭。其他的保持开放。

为什么?

示例代码:

<!DOCTYPE html>
<html>
<head>
  <title>Validation</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
        <input validate="something"  type="number" maxlength="9"  />
    <input validate="something" type="number" maxlength="9"  />

<script>
$('input[type=number][validate=something]').on('keypress', function(evt,obj) {
                var element =**pick the object**// $('input[type=number][validate=SSN]');
                var len = element.val().length + 1;
                var max = element.attr("maxlength");

                if (!(len <= max)) {
                    // some code
                }
});
</script>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您正在强制打开两个工具提示,然后不允许它们保持打开状态,这会导致异常。

System.NotSupportedException未处理 消息:PresentationFramework.dll中出现未处理的“System.NotSupportedException”类型异常 附加信息:默认情况下,ToolTip属性不支持将StaysOpen设置为false的ToolTip元素。

如果您希望它们保持打开状态,请更新ToolTipService.ShowDurationProperty

        ToolTipService.ShowDurationProperty.OverrideMetadata(typeof(DependencyObject), new FrameworkPropertyMetadata(Int32.MaxValue));

        {
            ToolTip tooltip = new ToolTip {Content = "Password cannot be empty."};

            Password_PasswordBox.ToolTip = tooltip;
            tooltip.PlacementTarget = Password_PasswordBox;
            tooltip.Placement = System.Windows.Controls.Primitives.PlacementMode.Top;
            tooltip.IsOpen = true;
            //tooltip.StaysOpen = false;
        }
        {
            ToolTip tooltip2 = new ToolTip { Content = "Username cannot be empty." };

            Username_TextBox.ToolTip = tooltip2;
            tooltip2.PlacementTarget = Username_TextBox;
            tooltip2.Placement = System.Windows.Controls.Primitives.PlacementMode.Top;
            tooltip2.IsOpen = true;
            //tooltip2.StaysOpen = false;
        }