WPF突出显示验证失败的选项卡标题

时间:2013-05-16 09:02:16

标签: c# wpf validation xaml tabcontrol

我目前有一个包含多个标签项的标签控件,其中每个标签项包含不同的自定义用户控件。 我希望相关标签包含验证失败时标签标题变为红色。我的验证在适当的绑定上实现为ValidationRules(转移到IDataError或其他验证方法不是一个可行的解决方案)。每个特定于选项卡的控件通过冒泡ValidationErrorsEvent跟踪它的错误并公开计数。

我目前正在使用x:名称选项卡上的特定控件& TabItem标题中的ElementName将特定于选项卡控件公开的计数绑定到标题中文本的颜色(通过转换器)。

<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>

由于WPF标签控件的惰性,每个标签的验证在打开之前不会发生。因此,包含无效字段的选项卡的标题在打开选项卡之前不会变为红色(之后它们保持正确)。

任何人都可以建议一种解决此问题的方法,或者另一种方法来实现相同的标签突出显示吗?

1 个答案:

答案 0 :(得分:0)

看看this post and answer;它是很多工作,可能是维护,但它确实可以使用多重触发器根据控件的HasError属性设置标头模板。不幸的是,它要求您为每个应该影响标题状态的控件的触发器添加一个条件。

您可以尝试将此与此帖的答案结合使用:Detecting WPF Validation Errors

遍历可视树以查找验证错误。从而使其变得动态,并且在构建UI时更少依赖于维持触发条件。