1 using System.Windows;
2 using System.Windows.Controls;
3 using System.Windows.Data;
4
5 namespace CXTWpfControlLibrary
6 {
7 /// <summary>
8 /// DControl.xaml 的交互逻辑
9 /// </summary>
10 public partial class DControl : UserControl
11 {
12 public DControl()
13 {
14 InitializeComponent();
15 Binding binding = new Binding();
16 // Set source object
17 binding.Source = this;
18 // Set source property
19 binding.Path = new PropertyPath("Text");
20 binding.Mode = BindingMode.TwoWay;
21 binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
22 // Attach to target property
23 TB1.SetBinding(TextBox.TextProperty, binding);
24 LB1.SetBinding(Label.ContentProperty, binding);
25 LB2.SetBinding(Label.ContentProperty, binding);
26 }
27
28 /// <summary>
29 /// Identifies the Value dependency property.
30 /// </summary>
31 public static readonly DependencyProperty TextProperty =
32 DependencyProperty.Register(
33 "Text", typeof(string), typeof(DControl),
34 new FrameworkPropertyMetadata(
35 "",
36 new PropertyChangedCallback(OnTextChanged)));
37
38 /// <summary>
39 /// Gets or sets the value assigned to the control.
40 /// </summary>
41 public string Text
42 {
43 get { return (string)GetValue(TextProperty); }
44 set { SetValue(TextProperty, value); }
45 }
46
47 private static object CoerceValue(DependencyObject element, object value)
48 {
49 string newText = (string)value;
50 DControl control = (DControl)element;
51
52 //newText = newText;
53
54 return newText;
55 }
56
57 private static void OnTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
58 {
59 DControl control = (DControl)obj;
60
61 RoutedPropertyChangedEventArgs<string> e = new RoutedPropertyChangedEventArgs<string>(
62 (string)args.OldValue, (string)args.NewValue, TextChangedEvent);
63 control.OnTextChanged(e);
64 }
65
66
67
68
69
70 /// <summary>
71 /// Identifies the ValueChanged routed event.
72 /// </summary>
73 public static readonly RoutedEvent TextChangedEvent = EventManager.RegisterRoutedEvent(
74 "ValueChanged", RoutingStrategy.Bubble,
75 typeof(RoutedPropertyChangedEventHandler<string>), typeof(DControl));
76
77 /// <summary>
78 /// Occurs when the Value property changes.
79 /// </summary>
80 public event RoutedPropertyChangedEventHandler<string> TextChanged
81 {
82 add { AddHandler(TextChangedEvent, value); }
83 remove { RemoveHandler(TextChangedEvent, value); }
84 }
85
86 /// <summary>
87 /// Raises the ValueChanged event.
88 /// </summary>
89 /// <param name="args">Arguments associated with the ValueChanged event.</param>
90 protected virtual void OnTextChanged(RoutedPropertyChangedEventArgs<string> args)
91 {
92 RaiseEvent(args);
93 }
94 }
95 }
<UserControl x:Class="CXTWpfControlLibrary.DControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<StackPanel>
<TextBox x:Name="TB1"/>
<Label x:Name="LB1"/>
<Label x:Name="LB2"/>
</StackPanel>
</Grid>
</UserControl>