1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
<TextBox
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="TestValidationTextBox.ValidationTextBox"
x:Name="Self"
Validation.ErrorTemplate="{x:Null}"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:TestValidationTextBox" >
<TextBox.Resources>
<local:IsNullOrEmptyTester x:Key="IsNullOrEmptyTester" />
</TextBox.Resources>
<TextBox.Template>
<ControlTemplate>
<DockPanel >
<Image DockPanel.Dock="Right" Width="16">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="True" />
<Condition Binding="{Binding ElementName=Self,Path=Text,Converter={StaticResource IsNullOrEmptyTester}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Source" Value="/media/images/error.png" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="False" />
<Condition Binding="{Binding ElementName=Self,Path=Text,Converter={StaticResource IsNullOrEmptyTester}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Source" Value="/media/images/noError.png" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Border Name="TextBoxBorder" BorderThickness="1"
HorizontalAlignment="Stretch">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="True" />
<Condition Binding="{Binding ElementName=Self,Path=Text,Converter={StaticResource IsNullOrEmptyTester}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="Red" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="False" />
<Condition Binding="{Binding ElementName=Self,Path=Text,Converter={StaticResource IsNullOrEmptyTester}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="Green" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBox
Name="TextBox"
MaxLength="{Binding ElementName=Self,Path=MaxLength,UpdateSourceTrigger=PropertyChanged}"
Text="{Binding ElementName=Self,Path=Text,UpdateSourceTrigger=PropertyChanged}"
Validation.ErrorTemplate="{x:Null}"
>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="True">
<Setter Property="ToolTip"
Value="{Binding ElementName=Self,Path=(Validation.Errors)[0].ErrorContent}"
/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Self,Path=(Validation.HasError)}" Value="False">
<Setter Property="ToolTip" Value="{Binding ElementName=Self,Path=tToolTip}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Border>
</DockPanel>
</ControlTemplate>
</TextBox.Template>
</TextBox> |