<Window x:Class="WindowsApp2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WindowsApp2"
Background="LightYellow"
Title="WindowsApp2" Height="300" Width="300"
>
<Grid ShowGridLines="True">
<Grid.Resources>
<c:MyData x:Key="MyResource"/>
<ControlTemplate x:Key="MyCtrlTemp">
<DockPanel>
<Button Foreground="Red" Width="20" Height="20">!!!</Button>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--Explicit-->
<Button Name="btnBind" Grid.Column="1" Grid.Row="0" Width="40" Height="40" />
<TextBox Name="txtShow" Grid.Column="0" Grid.Row="0" Width="100" Height="50"
Validation.ErrorTemplate="{StaticResource MyCtrlTemp}">
<TextBox.Text>
<Binding Source="{StaticResource MyResource}" Path="Name"
UpdateSourceTrigger="Explicit">
<Binding.ValidationRules>
<c:NameRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<!--LostFocus or Default-->
<TextBox Grid.Column="0" Grid.Row="1" Width="100" Height="50"
Validation.ErrorTemplate="{StaticResource MyCtrlTemp}">
<TextBox.Text>
<Binding Source="{StaticResource MyResource}" Path="Name"
UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<c:NameRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<!--PropertyChanged-->
<TextBox Grid.Column="0" Grid.Row="2" Width="100" Height="50"
Validation.ErrorTemplate="{StaticResource MyCtrlTemp}">
<TextBox.Text>
<Binding Source="{StaticResource MyResource}" Path="Name"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<c:NameRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
</Window>
类文件:
using System;
using System.Collections.Generic;
using System.Text;
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.Shapes;
namespace WindowsApp2
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
this.btnBind.Click += new RoutedEventHandler(btnBind_Click);
}
void btnBind_Click(object sender, RoutedEventArgs e)
{
txtShow.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
}
public class MyData
{
private string m_Name = "John";
public string Name
{
get { return m_Name; }
set { m_Name = value; }
}
}
public class NameRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
try
{
string tempName = (string)value;
if (tempName.Length > 0 && tempName.Equals("John"))
{
return new ValidationResult(true, null);
}
else
{
throw new Exception();
}
}
catch
{
return new ValidationResult(false,"Error Name");
}
}
}
}