我按照這個職位的說明:how to create Multiple user control that pointing single code behind file in silverlight 4如何將功能添加到繼承的屬性?
這是我的代碼示例。
public class MyCommonUserControl : UserControl
{
public static DependencyProperty CustomProperty = DependencyProperty.Register(
"CustomProperty", typeof(int), typeof(MyCommonUserControl));
public int CustomProperty
{
get
{
return (int)GetValue(TypeProperty);
}
set
{
SetValue(TypeProperty, value);
Extension();
}
}
public virtual void Extension()
{
}
}
public class FirstMyCommonUserControl : MyCommonUserControl
{
public FirstMyCommonUserControl()
{
InitializeComponent();
}
public override void Extension()
{
base.Extension();
// Do something
}
}
正如你在上面看到的,我使用了繼承。此代碼適用於我,因爲我有幾個自定義控件,其中一個是重寫虛擬方法的FirstMyCommonUserControl類,我可以爲此特定類添加一些內容。然後我這麼做:
MyCommonUserControl A;
int number;
private void button1_Click(object sender, RoutedEventArgs e)
{
switch (number)
{
case 1:
case 2:
case 3:
case 4:
A = new FirstMyCommonUserControl();
A.CustomProperty = number;
canvas1.Children.Add((FirstMyCommonUserControl)A);
break;
case 5:
case 6:
case 7:
case 8:
A = new AnotherMyCommonUserControl();
A.CustomProperty = number;
canvas1.Children.Add((AnotherMyCommonUserControl)A);
break;
}
}
每個特定的類都需要在CustomProperty中做更多的事情。我使用虛擬方法創建它並覆蓋它。我不知道這是否是最好的方法。
如果你正在做的是,當一個依賴執行額外的動作屬性設置(或更改),您應該只註冊屬性的值更改處理程序。不需要明確地使其變成「虛擬」或改變基本行爲。 –
確實。實際上,對於依賴項屬性,您甚至不應**在CLR包裝器中執行任何操作,請參閱[本頁](http://msdn.microsoft.com/zh-cn/library/bb613563.aspx)爲什麼是這種情況。 –