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

标签 c# wpf validation xaml tabcontrol

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

我目前在选项卡特定控件上使用 x:Name 并在 TabItem header 中使用 ElementName 将选项卡特定控件公开的计数绑定(bind)到 header 中文本的颜色(通过转换器)。

<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 选项卡控件的惰性,每个选项卡的验证在打开之前不会发生。因此,包含无效字段的选项卡的标题在打开选项卡之前不会变为红色(之后它们保持正确)。

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

最佳答案

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

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

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

关于c# - WPF 突出显示验证失败的选项卡标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583183/

相关文章:

.net - WPF:如何注册其他隐式值转换器?

C# 继承和成员隐藏

c# - 着色器可以旋转形状以面向相机吗?

C# 向每个 aspx 页面插入代码块

c# - 数据网格未正确更新,滚动时更新

jquery - 输入被禁用,直到先前的输入被填充

c# - 如何在 C# 中将函数附加在一起?

wpf mvvm 自定义控件 - 在控件上调用操作

c - 在C中如何验证输入值只是正数?

javascript - Input Onkeyup 可以通过表单自动完成来避免