我遇到TabControl
,TextBox
和验证ToolTip
的问题。
想象一下,TabControl有两个TabItem。在第一项上有一个简单的TextBox
。此TextBox
Text
属性绑定到UserControl
本身的字符串属性Mode=TwoWay
和ValidatesOnExceptions=True
。只要设置了某些内容,该Text
属性的setter就会抛出异常。
Resources
的{{1}}部分包含UserControl
和验证TextBox
的新默认样式(但这些样式和模板取自MSDN }})。
现在在ToolTip
中输入内容,然后显示验证TextBox
:
然后切换到第二个标签。验证工具提示仍然是:
我已经制作了一个VS解决方案,其中包含一个演示该问题的Silverlight应用程序。 VS解决方案zip存档可用here。
是否有人遇到类似的问题甚至解决了这个问题?
免责声明:关于Silverlight 4存在类似的问题here on StackOverflow,自大约一年半以来一直未得到答复。 我已经在silverlight.net上发布了这个问题,但几天没有回复。
答案 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”节点,您将获得预期的行为。
[编辑]我没有看到你问题的结尾,抱歉:)