我目前有一个包含多个选项卡项的选项卡控件,其中每个选项卡项包含不同的自定义用户控件。 当关联的选项卡包含验证失败时,我希望选项卡标题变为红色。我的验证是在适当的绑定(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/