需求:需要给silverlight控件增加一个扩展属性,做权限控制,本想声明一个接口来增加一个属性,而.net还不支持多继承.做法比较简单,主要使用依赖属性和扩展方法。一看就能懂,直接贴代码了。
/// <summary>
/// 给指定控件增加依赖属性
/// </summary>
public class ExtensionAuthorProperty
{
/// <summary>
/// 获取鉴权控件Id
/// </summary>
/// <param name="obj">鉴权控件</param>
/// <returns></returns>
public static string GetAuthorId(DependencyObject obj)
{
return (string)obj.GetValue(myTagProperty);
}
/// <summary>
/// 设置鉴权控件Id
/// </summary>
/// <param name="obj">鉴权控件</param>
/// <returns></returns>
public static void SetAuthorId(DependencyObject obj, string value)
{
obj.SetValue(myTagProperty, value);
}
public static readonly DependencyProperty myTagProperty = DependencyProperty.RegisterAttached("AuthorId", typeof(string), typeof(ExtensionAuthorProperty), new PropertyMetadata(""));
}
/// <summary>
/// 给Control增加扩展方法,便于控件在代码中动态修改扩展属性的值
/// </summary>
public static class ExtensionControl
{
public static string GetAuthorId(this Control control)
{
return ExtensionAuthorProperty.GetAuthorId(control);
}
public static void SetAuthorId(this Control control, string id)
{
ExtensionAuthorProperty.SetAuthorId(control, id);
}
}
页面具体使用方法:
1.<Button mytype:ExtensionAuthorProperty.AuthorId="4321" x:Name="testButton1" Content="有权限所以显示" HorizontalAlignment="Left" Margin="47,146,0,0" VerticalAlignment="Top" Click="testName_Click"/>
2.直接在代码中设置属性testButton1.SetAuthorId("4321");,获取扩展属性值testButton1.GetAuthorId("4321");