1

我有包含文本框的扩展器,文本框使用 wpf 验证内容在它们周围绘制一个红色框(文本框被包裹在 Adorner 装饰器中,以确保在展开器折叠时我不会到处都是空的红色框)

我想在扩展器的标题中指出它的内容有错误(如果它处于折叠状态) - 一个图标或红色感叹号或其他东西。我想我从我的验证函数中看到了一种在代码中执行此操作的方法(不理想),但是有没有办法在 xaml 中执行此操作?我可以使用带有触发器的扩展器样式以某种方式指向所有孩子的 Validation.HasError 吗?

谢谢你的任何想法..

特雷夫

4

1 回答 1

2

如果您知道扩展器的内容,则可以使用 MultiDataTrigger 来执行此操作:

<Expander>
    <Expander.Header>
        <TextBlock>
            <TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Text" Value="ERROR"/>
                    <Style.Triggers>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Binding="{Binding ElementName=txtWidth, Path=(Validation.HasError)}" Value="False"/>
                                <Condition Binding="{Binding ElementName=txtHeight, Path=(Validation.HasError)}" Value="False"/>
                            </MultiDataTrigger.Conditions>
                            <Setter Property="Text" Value="NO ERROR"/>
                        </MultiDataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </Expander.Header>
    <StackPanel>
        <TextBox x:Name="txtWidth" Text="{Binding Width, ElementName=rect, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
        <TextBox x:Name="txtHeight" Text="{Binding Height, ElementName=rect, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
        <Rectangle x:Name="rect" Width="100" Height="100" Margin="10" Fill="Green"/>
    </StackPanel>
</Expander>

如果扩展器的内容未知,那么您可能必须在 TextBoxes 上设置 Binding.NotifyOnValidationError 并处理附加的错误事件。

于 2008-11-21T21:39:52.490 回答