Как я могу указать в заголовке Expander, что в свернутом содержимом произошла ошибка - PullRequest
1 голос
/ 20 ноября 2008

У меня есть расширители, которые содержат текстовые поля, текстовые поля используют материал проверки wpf, чтобы нарисовать вокруг них красное поле (текстовые поля обернуты в Adorner Decorators, чтобы убедиться, что я не получаю пустые красные поля везде, когда расширители разрушилась)

Я хочу указать в заголовке расширителя, что в нем есть ошибки (в случае свертывания) - значок или красный восклицательный знак или что-то еще. Я думаю, что я вижу способ сделать это в коде из моей функции проверки (не идеально), но есть ли способ сделать это в xaml? Могу ли я использовать стиль для расширителя с триггером, каким-то образом указывающим на Validation.HasError всех дочерних элементов?

спасибо за любые мысли ..

Trev

1 Ответ

2 голосов
/ 22 ноября 2008

Если вам известно содержимое вашего детандера, вы можете использовать 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>

Если содержимое экспандера неизвестно, то вам, вероятно, придется установить Binding.NotifyOnValidationError в TextBoxes и обработать событие Error attach.

...