Spo*_*xus 6 validation tabcontrol tooltip silverlight-toolkit silverlight-5.0
我有a TabControl
,a TextBox
和验证的问题ToolTip
.
想象一下,TabControl有两个TabItems.在第一项上有一个简单的TextBox
.此TextBox
Text
属性绑定到的字符串属性UserControl
本身Mode=TwoWay
和ValidatesOnExceptions=True
.Text
只要设置了某些内容,该属性的setter 就会抛出异常.
该Resources
部分UserControl
包含一个新的默认样式TextBox
和验证ToolTip
(但这些样式和模板取自MSDN).
现在输入内容TextBox
并让验证ToolTip
显示出来:
然后切换到第二个选项卡.验证工具提示仍然是:
我已经制作了一个包含Silverlight应用程序的VS解决方案来演示这个问题.VS解决方案zip存档可在此处获得.
是否有人遇到类似的问题,甚至解决了这个问题?
免责声明:关于Silverlight 4,StackOverflow上有类似的问题,自大约一年半以来一直未得到答复.我已经在silverlight.net上发布了这个问题但几天没有回复.
我认为这是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)