Haven't tried this, but I think the best way would be to go ahead and style your normal textbox template to show the green border and the checkmark
Put the border and the checkmark invisible by default.
Use triggers to make the stuff show when there is no focus and the user has entered something into the textbox.
Something like this?:
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="False" />
<Condition Property="Text" Value="" />
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="border" Value="Visible" />
<Setter Property="Visibility" TargetName="checkmark" Value="Visible" />
</MultiTrigger>
</ControlTemplate.Triggers>
Reference Article
Control Template might look something like this:
<TextBox.Template>
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="107*"/>
<ColumnDefinition Width="23*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.ColumnSpan="1" />
<Border Name="border" BorderBrush="DarkGreen" BorderThickness="1" Grid.ColumnSpan="1" Visibility="Hidden">
</Border>
<Image Name="checkmark" Grid.Column="1" Source="Images/check_48.ico" Grid.ColumnSpan="2" Visibility="Hidden" />
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="border" Value="Visible" />
<Setter Property="Visibility" TargetName="checkmark" Value="Visible" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</TextBox.Template>
In my sample...I have the border and the checkmark only showing when the mouse is over the item...You would have it showing when it is NOT empty...and it is not focused like above.