如何给silverlight控件增加扩展属性

需求:需要给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");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinUI 控件、UWP 控件、WPF 控件Silverlight 控件在语法和结构上有所不同,因此可以通过检查 XAML 代码的命名空间来区分它们。以下是一些常见的命名空间和控件: - WinUI 控件:命名空间为 `http://schemas.microsoft.com/winui/2021/xaml/behaviors` 或 `http://schemas.microsoft.com/winui/2021/xaml/presentation`,控件名称以 `Microsoft.UI` 开头。 - UWP 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/winfx/2008/xaml/presentation`,控件名称以 `Windows.UI` 开头。 - WPF 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/netfx/2007/xaml/presentation`,控件名称以 `System.Windows` 或 `Microsoft.Windows` 开头。 - Silverlight 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/client/2007`,控件名称以 `System.Windows.Controls` 或 `Microsoft.Windows.Controls` 开头。 可以通过读取 XAML 文件中的命名空间来确定使用的控件类型。例如,以下代码片段演示了如何读取 XAML 文件中的命名空间: ```csharp using System.Xml.Linq; // Load XAML file into an XDocument XDocument xdoc = XDocument.Load("MyXamlFile.xaml"); // Get the root element of the XAML file XElement root = xdoc.Root; // Get the default namespace of the XAML file XNamespace ns = root.GetDefaultNamespace(); // Check the namespace to determine the type of controls used in the XAML file if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/winui")) { // WinUI controls } else if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/winfx")) { // UWP or WPF controls } else if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/client")) { // Silverlight controls } else { // Unknown namespace } ``` 请注意,这只是一种简单的方法来区分不同类型的控件,实际上还需要考虑一些其他因素,例如控件属性和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值