我目前有一个包含多个选项卡项的选项卡控件,其中每个选项卡项包含不同的自定义用户控件。当关联的选项卡包含验证失败时,我希望选项卡标题变为红色。我的验证在适当的绑定上实现为 ValidationRules(移至 IDataError 或其他验证方法不是可行的解决方案)。每个选项卡特定的控件通过冒泡的 ValidationErrorsEvent 跟踪它的错误并公开一个计数。
我目前在 TabItem 标题中的选项卡特定控件和 ElementName 上使用 x:Name 将选项卡特定控件公开的计数绑定到标题中文本的颜色(通过转换器)。
<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 选项卡控件的惰性,每个选项卡的验证在打开之前不会发生。因此,包含无效字段的选项卡的标题在打开选项卡之前不会变成红色(之后它们保持正确)。
任何人都可以提出解决此问题的方法,或实现相同选项卡突出显示的替代方法吗?