样式
<Style TargetType="TextBox">
<Setter Property="Width" Value="100"></Setter>
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
<Setter Property="Height" Value="25"></Setter>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Foreground="Red"
Text="{Binding ElementName=adorned,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder x:Name="adorned"/>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Trigger.Setters>
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="Background" Value="Red" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
xml
<TextBox Grid.Column="1" Grid.Row="1">
<TextBox.Text>
<Binding Path="PRWidth" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource DoubleToString}">
<Binding.ValidationRules>
<local:NumberValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
c#
/// <summary>
/// PR宽度
/// </summary>
private double _PRWidth;
public double PRWidth
{
get { return _PRWidth; }
set
{
if (_PRWidth != value)
{
_PRWidth = value;
NotifyChanged("PRWidth");
}
}
}
/// <summary>
/// 验证是否是数字
/// </summary>
public class NumberValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var strVal = (string)value;
double vsNum;
bool isNum;
isNum = double.TryParse(strVal, System.Globalization.NumberStyles.Float,
System.Globalization.NumberFormatInfo.InvariantInfo, out vsNum);
if (isNum)
{
return ValidationResult.ValidResult;
}
else
{
return new ValidationResult(false, "error");
}
}
}
/// <summary>
/// double转string
/// </summary>
[ValueConversion(typeof(double), typeof(string))]
public class DoubleToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var d = (double)value;
return d.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
return double.Parse((string)value);
}
catch (InvalidOperationException)
{
return null;
}
}
}
如图