设计自己的UserControl有利于控件的复用,对于后面的工作有着复利一般的好处。
自己设计usercontrol不仅仅是直接拖动控件组合那么简单,需要做到完全的封装,就需要自己定义依赖属性,使得在后面的集成使用的时候可以在xaml中直接使用,这篇文章中的例子就是介绍怎么定义自己的依赖属性和怎么设置依赖属性中的回调函数。先上代码:
public List<string> Labels
{
get { return (List<string>)GetValue(LabelsProperty); }
set { SetValue(LabelsProperty, value); }
}
// Using a DependencyProperty as the backing store for Labels. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LabelsProperty =
DependencyProperty.Register("Labels", typeof(List<string>), typeof(EEGCurvePresentUserControl), new PropertyMetadata(new PropertyChangedCallback(onLabelsChanged)));
static void onLabelsChanged(object sender, DependencyPropertyChangedEventArgs args)
{
List<string> labels = (List<string>)args.NewValue;
chinnalNum = labels.Count;
CurvePresentUserControl curvePresentUserControl = (CurvePresentUserControl)sender;
curvePresentUserControl.LabelsListBox.ItemsSource = labels;
}
这个代码属于的项目是需要写一个高速的波形显示模块,所以自己用writeablebitmap实现了一个
代码中的依赖属性的大部分代码可以直接用propdp接着双击tab来自动生成,然后使用tab设置自己需要的名称即可,在是
new PropertyMetadata(new PropertyChangedCallback(onLabelsChanged))
和 CurvePresentUserControl curvePresentUserControl = (CurvePresentUserControl)sender;
一个是设置在xaml中使用binding时需要执行的回调函数,一个是获得传递的组件参数访问相关的控件。
这里如果不设置这个回调函数而是直接在set中写相关代码,就只能在后台代码设置属性的时候会执行,而xaml中binding后更改INotifyPropertyChanged并不能执行到。