Come posso indicare in un'intestazione di Expander che i contenuti compressi hanno un errore

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

  •  08-07-2019
  •  | 
  •  

Domanda

Ho degli espansori che contengono caselle di testo, le caselle di testo usano le cose di convalida wpf per disegnare una casella rossa attorno a loro (le caselle di testo sono avvolte in Adorner Decorator per assicurarsi che non vengano visualizzate caselle rosse vuote ovunque quando le espansioni sono compresso)

Voglio indicare nell'intestazione dell'espansore che ha contenuti che presentano errori (nel caso in cui sia crollato) - un'icona o un punto esclamativo rosso o qualcosa del genere. Penso di vedere un modo per farlo nel codice dalla mia funzione di validazione (non ideale) ma c'è un modo per farlo in xaml? Posso usare uno stile per l'espansore con un trigger che in qualche modo punta alla convalida. Ha l'errore di tutti i bambini?

grazie per ogni pensiero ..

Trev

È stato utile?

Soluzione

Se conosci i contenuti del tuo expander, puoi usare un MultiDataTrigger per fare questo:

<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 il contenuto dell'espansore non è noto, probabilmente dovrai impostare Binding.NotifyOnValidationError su TextBox e gestire l'evento associato ad Errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top