Pergunta

Eu tenho expansores que contêm caixas de texto, caixas de texto usam o material de validação WPF para desenhar uma caixa vermelha em torno deles (caixas de texto são embrulhados em Adorner Decoradores ter certeza que eu não entendo caixas vermelhas vazias em todos os lugares quando os expansores são recolhido)

quero indicar no cabeçalho do expansor que tem conteúdos que têm erros (no caso, está em um estado entrou em colapso) - um ícone ou ponto de exclamação vermelho ou algo assim. Acho que vejo uma maneira de fazer isso no código de minha função de validação (não ideal), mas há uma maneira de fazê-lo em XAML? Posso usar um estilo para o expansor com um gatilho de alguma forma, apontando para a Validation.HasError de todas as crianças?

Obrigado por todos os pensamentos ..

Trev

Foi útil?

Solução

Se você sabe o conteúdo do seu expansor, você pode usar um MultiDataTrigger para fazer isso:

<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>

Se o conteúdo do expansor não são conhecidos, então você provavelmente vai ter de definir Binding.NotifyOnValidationError nas caixas de texto e manipular o evento de erro em anexo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top