Mostrare gli errori di validazione in WPF

di Cristian Civera, in Windows Presentation Foundation,

Nello script #15 si è visto come il potente motore di Binding, offerto da Windows Presentation Foundation, consenta di validare i dati immessi dall'utente attraverso l'uso dei ValidationRule.
Quando una validazione fallisce il Binding salva gli errori riscontrati in una attached property Errors definita nell'oggetto di servizio Validation. Normalmente questo fa scatenare un template che come comportamento base contorna di rosso l'elemento, ma attraverso l'attached property ErrorTemplate è possibile personalizzarne completamente l'aspetto.

Per farlo occorre definire prima di tutto un ControlTemplate che sostituisca interamente l'oggetto in Binding e facoltativamente reimmetta l'oggetto stesso attraverso l'oggetto speciale AdornedElementPlaceholder che contiene tramite la proprietà AdornedElement l'elemento originale.
Ecco un esempio di template che appone un punto esclamativo a fianco dell'elemento e imposta il tooltip con il messaggio di errore:

<ControlTemplate x:Key="validationTemplate">
  <DockPanel>
    <TextBlock
        DockPanel.Dock="Right"
        ToolTip="{Binding ElementName=tb,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
        Foreground="Red"
        FontWeight="Bold"
        FontSize="14">!</TextBlock>
    <AdornedElementPlaceholder/>
  </DockPanel>
</ControlTemplate>

Successivamente occorre indicare ad ogni elemento che subisce una validazione, quale template utilizzare tramite la già citata proprietà ErrorTemplate (come tutte le proprietà è possibile usare gli style per applicarla):

<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}">
  <TextBox.Text>
    <Binding Path="Text" ElementName="number">
      <Binding.ValidationRules>
        <local:Int32ValidationRule />
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

Un'ulteriore proprietà molto utile esposta da Validation è HasError che permette generalmente tramite trigger di cambiare alcune informazioni dell'elemento, come il tooltip o i colori.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi