1 新建wpf程序
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel>
<TextBox BorderBrush="Black" x:Name="txt"></TextBox>
<StackPanel Height="30"></StackPanel>
<Slider BorderBrush="Gray" x:Name="slider" Maximum="100" Minimum="-10"></Slider>
</StackPanel>
</Grid>
</Window>
2 新建RangeValidationRule
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace WpfApp3
{
public class RangeValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
double d = 0;
if (double.TryParse(value.ToString(),out d))
{
if (d>=0 && d<=100)
{
return new ValidationResult(true, null);
}
}
return new ValidationResult(false, "Validation failed");
}
}
}
3 主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp3
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Binding b = new Binding("Value") { Source = this.slider };
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
RangeValidationRule rule = new RangeValidationRule();
//检查数据到UI,默认只检查UI到数据
rule.ValidatesOnTargetUpdated = true;
b.ValidationRules.Add(rule);
b.NotifyOnValidationError = true;
txt.SetBinding(TextBox.TextProperty, b);
txt.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(Validation_Error));
//Validation.AddErrorHandler(txt, new EventHandler<ValidationErrorEventArgs>(Validation_Errors));
}
//private void Validation_Errors(object sender, ValidationErrorEventArgs e)
//{
//txt.ToolTip = e.Error.ErrorContent.ToString();
//}
private void Validation_Error(object sender, RoutedEventArgs e)
{
if (Validation.GetErrors(txt).Count>0)
{
this.txt.ToolTip = Validation.GetErrors(txt)[0].ErrorContent.ToString();
}
}
}
}