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
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub