我目前有一个选项卡控件,它包含多个选项卡项,其中每个选项卡项包含不同的自定义用户控件。,我希望当关联的选项卡包含验证失败时,选项卡头变成红色。我的验证是在适当的绑定上作为ValidationRules实现的(转移到IDataError或另一种验证方法并不是一个可行的解决方案)。每个选项卡特定的控件通过冒泡的ValidationErrorsEvent跟踪它的错误,并公开一个计数。
目前,我在选项卡特定控件上使用x:Name & ElementName在TabItem标头中将选项卡特定控件公开的计数绑定到标题中文本的颜色(通过转换器)。
<TabControl>
<TabItem>
<TabItem.Header>
<TextBlock Text="Tab 1" Foreground="{Binding Errors.Count, ElementName=_tabOne, Converter={StaticResource ErrorCountToColorConverter}}" />
</TabItem.Header>
<AdornerDecorator>
<my:CustomTabOneControl x:Name="_tabOne" />
</AdornerDecorator>
</TabItem>
<TabItem>
<TabItem.Header>
<TextBlock Text="Tab 2" Foreground="{Binding Errors.Count, ElementName=_tabTwo, Converter={StaticResource ErrorCountToColorConverter}}" />
</TabItem.Header>
<AdornerDecorator>
<my:CustomTabTwoControl x:Name="_tabTwo" />
</AdornerDecorator>
</TabItem>
</TabControl>由于WPFs选项卡控件的懒散性,在打开每个选项卡之前不会对每个选项卡进行验证。因此,包含无效字段的制表符的标题在打开选项卡之前不会变红(在此之后,它们保持正确)。
有人能提出解决这个问题的方法吗,或者用另一种方法来实现同样的标签突出显示?
发布于 2013-05-16 09:39:58
请看一下这篇文章和答案;它需要大量的工作和可能的维护,但是它确实可以通过使用基于控件的HasError属性设置标头模板的多触发器来工作。不幸的是,它要求您在每个控件的触发器中添加一个条件,以影响标头的状态。
您可以尝试将其与以下文章的答案结合起来:检测WPF验证错误
它遍历可视树以查找验证错误。因此,在构建UI时,它是动态的,并且减少了对维护触发器条件的依赖。
https://stackoverflow.com/questions/16583183
复制相似问题