TabControl上剩余的验证工具提示

Spo*_*xus 6 validation tabcontrol tooltip silverlight-toolkit silverlight-5.0

我有a TabControl,a TextBox和验证的问题ToolTip.

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

Resources部分UserControl包含一个新的默认样式TextBox和验证ToolTip(但这些样式和模板取自MSDN).

现在输入内容TextBox并让验证ToolTip显示出来:

在此输入图像描述

然后切换到第二个选项卡.验证工具提示仍然是:

在此输入图像描述

我已经制作了一个包含Silverlight应用程序的VS解决方案来演示这个问题.VS解决方案zip存档可在此处获得.

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

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

And*_*dir 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;
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)