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

C# WPF突出显示验证失败的选项卡标题,c#,wpf,validation,xaml,tabcontrol,C#,Wpf,Validation,Xaml,Tabcontrol,我目前有一个包含多个选项卡项的选项卡控件,其中每个选项卡项包含不同的自定义用户控件当相关选项卡包含验证失败时,我希望选项卡标题变为红色。我的验证是作为适当绑定上的ValidationRules实现的(转移到IDataError或其他验证方法不是可行的解决方案)。每个特定于选项卡的控件通过冒泡的ValidationErrorEvent跟踪其错误,并公开一个计数 我目前正在TabItem标题中的tab特定控件和ElementName上使用x:Name将tab特定控件公开的计数绑定到标题中文本的颜色(

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

我目前正在TabItem标题中的tab特定控件和ElementName上使用x:Name将tab特定控件公开的计数绑定到标题中文本的颜色(通过转换器)


由于WPFs选项卡控件的惰性,在打开每个选项卡之前,不会对其进行验证。因此,包含无效字段的选项卡的标题在打开该选项卡之前不会变为红色(之后它们仍然正确)

有人能提出一种解决这个问题的方法,或者一种实现相同标签突出显示的替代方法吗?

看看;这是一项大量的工作,可能需要维护,但它确实可以通过使用multitrigger来工作,multitrigger根据控件的HasError属性设置标题模板。不幸的是,它要求您为每个控件的触发器添加一个条件,该条件会影响标头的状态

您可以尝试将此与此帖子的答案结合起来:


它遍历可视化树以查找验证错误。从而使其具有动态性,并且在构建UI时不太依赖于维护触发条件。

嗨,菲尔,看看这个链接,我认为它与您想要的类似。而不是标签名称的文本改变颜色,它会根据具有验证的属性改变图像。希望这有帮助!:)您好,Gregory,感谢您的输入,不幸的是,链接文章使用了IDataError(viewmodel端)验证跟踪(我的是view端),正如我在原始帖子中所说,这在我的情况下不是一个可行的解决方案。不过,您应该特别看看
xaml
。它使用datatriggers和样式来启用
选项卡控件
标题的更改,我认为这可能适合您尝试和实现。
<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>