3

我目前有一个包含多个选项卡项的选项卡控件,其中每个选项卡项包含不同的自定义用户控件。当关联的选项卡包含验证失败时,我希望选项卡标题变为红色。我的验证在适当的绑定上实现为 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 选项卡控件的惰性,每个选项卡的验证在打开之前不会发生。因此,包含无效字段的选项卡的标题在打开选项卡之前不会变成红色(之后它们保持正确)。

任何人都可以提出解决此问题的方法,或实现相同选项卡突出显示的替代方法吗?

4

1 回答 1

0

看看这个帖子并回答;它需要做很多工作并且可能需要维护,但它确实可以通过使用基于控件的 HasError 属性设置标题模板的多重触发器来工作。不幸的是,它要求您为应该影响标题状态的每个控件的触发器添加一个条件。

您可以尝试将此与这篇文章的答案结合起来:Detecting WPF Validation Errors

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

于 2013-05-16T09:39:58.187 回答