¿Cómo puedo indicar en un encabezado Expander que los contenidos contraídos tienen un error

StackOverflow https://stackoverflow.com/questions/306074

  •  08-07-2019
  •  | 
  •  

Pregunta

Tengo expansores que contienen cuadros de texto, los cuadros de texto usan el material de validación wpf para dibujar un cuadro rojo a su alrededor (los cuadros de texto están envueltos en Adorner Decorators para asegurarse de que no obtengo cuadros rojos vacíos en todas partes cuando los expansores están colapsado)

Quiero indicar en el encabezado del expansor que tiene contenido que tiene errores (en caso de que esté colapsado): un icono o un signo de exclamación rojo o algo así. Creo que veo una manera de hacer esto en código desde mi función de validación (no es ideal), pero ¿hay alguna manera de hacerlo en xaml? ¿Puedo usar un estilo para el expansor con un disparador que de alguna manera apunte a Validation.HasError de todos los niños?

gracias por cualquier comentario ..

Trev

¿Fue útil?

Solución

Si conoce el contenido de su expansor, puede usar un MultiDataTrigger para hacer esto:

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

Si no se conoce el contenido del expansor, entonces probablemente tendrá que configurar Binding.NotifyOnValidationError en los cuadros de texto y manejar el evento Error adjunto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top