先来解释一下wfp下用户控件和自定义控件的不同,如有疏漏,欢迎指教。
用户控件一般是把现有的控件通过组装,实现一个控件组的功能,一般大型的项目,经常要用到几个控件的组合时,就可以把这几个控件组合成一个用户控件,实现特定的功能。自定义控件,一般是把原有的某个控件进行深加工,主要是在样式和触发器上做文章,实现个性化的控件功能。
说了那么多,接下来做一个用户控件,首先这个控件是由多个控件组成的,一个combobox一个listrbox还有一个button,combobox和listbox是联动的,并且切换listbox可以触发给调用页面,整体功能比较简单方便读者学习,先添加用户控件,系统会自动生成xaml和xaml.cs文件,可以理解就是一个页面,不过不是window而是UserControl。
添加完页面后,就可以自己设计页面布局,并可以绑定相应的数据或者添加事件,就像普通页面那样。接着从后台给用户控件添加属性以及事件代码
/// <summary>
/// 添加产品的按钮显示
/// </summary>
public Visibility ShowButton
{
get { return btn.Visibility; }
set { btn.Visibility = value; }
}
/// <summary>
/// listbox切换事件
/// </summary>
public static readonly RoutedEvent MyAccountEvent =
EventManager.RegisterRoutedEvent("MyAccount", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ListBox));
/// <summary>
/// listbox切换事件的属性
/// </summary>
public event RoutedEventHandler MyAccount
{
add
{
AddHandler(MyAccountEvent , value);
}
remove
{
RemoveHandler(MyAccountEvent , value);
}
}
public void lbxAccounts_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
RoutedEventArgs args = new RoutedEventArgs(MyAccountEvent , this);
RaiseEvent(args);
}
在需要调用该用户控件的xaml页面加入以下代码
<local:CommboxBox x:Name="CBXAccounts" ShowButton="Visible" ></local:CommboxBox>
在在该xaml的后端加入注册的事件
clxBrokerAccounts.MyAccount += ClxBrokerAccounts_MyAccount;
private void ClxBrokerAccounts_MyAccount(object sender, RoutedEventArgs e)
{
触发用户控件的事件后做的事
}