TabControl上剩余的验证工具提示

时间:2012-07-12 15:41:33

标签: validation tooltip tabcontrol silverlight-toolkit silverlight-5.0

我遇到TabControlTextBox和验证ToolTip的问题。

想象一下,TabControl有两个TabItem。在第一项上有一个简单的TextBox。此TextBox Text属性绑定到UserControl本身的字符串属性Mode=TwoWayValidatesOnExceptions=True。只要设置了某些内容,该Text属性的setter就会抛出异常。

Resources的{​​{1}}部分包含UserControl和验证TextBox的新默认样式(但这些样式和模板取自MSDN }})。

现在在ToolTip中输入内容,然后显示验证TextBox

enter image description here

然后切换到第二个标签。验证工具提示仍然是:

enter image description here

我已经制作了一个VS解决方案,其中包含一个演示该问题的Silverlight应用程序。 VS解决方案zip存档可用here

是否有人遇到类似的问题甚至解决了这个问题?

免责声明:关于Silverlight 4存在类似的问题here on StackOverflow,自大约一年半以来一直未得到答复。 我已经在silverlight.net上发布了这个问题,但几天没有回复。

2 个答案:

答案 0 :(得分:3)

我认为这是TabControl - 实施的错误。我已经实现了这种行为来修复我们的应用程序:

public class TabControlFixBehavior: Behavior<TabControl>
{
    protected override void OnAttached()
    {
        AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged;
        base.OnAttached();
    }

    protected override void OnDetaching()
    {
        AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged;

        base.OnDetaching();
    }

    private void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs args)
    {
        if (args.RemovedItems.Count > 0)
        {
            var oldTabItem = args.RemovedItems[0] as TabItem;
            if (oldTabItem != null)
            {
                var popups = VisualTreeHelper.GetOpenPopups();
                foreach (var popup in popups)
                {
                    var toolTip = popup.Child as ToolTip;
                    if (toolTip != null)
                    {
                        if (VisualTreeHelper.GetRoot(toolTip.PlacementTarget) == oldTabItem.Content)
                        {
                            popup.IsOpen = false;
                        }
                    }
                }
            }
        }
    }
}

答案 1 :(得分:0)

验证工具提示是silverlight 5中的隐含功能。 请清除“主页”用户控件中的“UserControl.Resources”节点,您将获得预期的行为。

[编辑]我没有看到你问题的结尾,抱歉:)