Mega Code Archive

 
Categories / C# / WPF
 

Specify Validation Rules for a Binding

<Window      x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:WpfApplication1="clr-namespace:WpfApplication1"     Title="WPF" Height="100" Width="280">     <Window.Resources>         <Style              x:Key="textBoxInErrorStyle"              TargetType="{x:Type TextBox}" >             <Style.Triggers>                 <Trigger Property="Validation.HasError" Value="true">                     <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static                                                    RelativeSource.Self},                                  Path=(Validation.Errors)[0].ErrorContent}"/>                 </Trigger>             </Style.Triggers>             <Setter Property="Validation.ErrorTemplate">                 <Setter.Value>                     <ControlTemplate>                         <DockPanel DockPanel.Dock="Right">                             <AdornedElementPlaceholder/>                             <Image Source="Error.png" Width="16" Height="16"                                ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource                                              Mode=FindAncestor,                                             AncestorType={x:Type Adorner}}}"/>                         </DockPanel>                     </ControlTemplate>                 </Setter.Value>             </Setter>         </Style>     </Window.Resources>     <StackPanel>         <Slider Name="slider" Margin="4" Interval="1" TickFrequency="1" IsSnapToTickEnabled="True" Minimum="0" Maximum="100"/>         <StackPanel Orientation="Horizontal" >             <TextBox Style="{StaticResource textBoxInErrorStyle}" HorizontalAlignment="Center" >               <TextBox.Text>                     <Binding ElementName="slider" Path="Value" Mode="TwoWay"                         UpdateSourceTrigger="PropertyChanged" >                        <Binding.ValidationRules>                             <WpfApplication1:PercentageRule/>                         </Binding.ValidationRules>                     </Binding>                 </TextBox.Text>             </TextBox>          </StackPanel>     </StackPanel> </Window> //File:Window.xaml.cs using System.Globalization; using System.Windows.Controls; namespace WpfApplication1 {     public class PercentageRule : ValidationRule     {         public override ValidationResult Validate(object value,CultureInfo cultureInfo)         {             string stringValue = value as string;             if(!string.IsNullOrEmpty(stringValue))             {                 double doubleValue;                 if(double.TryParse(stringValue, out doubleValue))                 {                     if(doubleValue >= 0 && doubleValue <= 100)                     {                         return new ValidationResult(true, null);                     }                 }             }             return new ValidationResult(false, "Must be a number between 0 and 100");         }     } }