6

我对 a TabControl、 aTextBox和 a validation 有疑问ToolTip

想象一下有一个带有两个 TabItem 的 TabControl。第一项上有一个简单的TextBox. 此属性使用和TextBox Text绑定到UserControl自身的字符串属性。每当设置某些内容时,该属性的设置器都会引发异常。Mode=TwoWayValidatesOnExceptions=TrueText

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

现在输入一些内容TextBox并让验证ToolTip出现:

在此处输入图像描述

然后切换到第二个选项卡。验证工具提示仍然存在:

在此处输入图像描述

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

有没有人遇到过类似的问题,甚至有解决该问题的方法?

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

4

2 回答 2

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;
                        }
                    }
                }
            }
        }
    }
}
于 2012-09-07T11:57:25.823 回答
0

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

[编辑]我没有读到你问题的结尾,对不起:)

于 2012-07-16T15:51:20.487 回答