当前位置: 首页 > news >正文

网站自创汽车行业网站建设比较好

网站自创,汽车行业网站建设比较好,淮安哪有专业做网站的公司,南京专业网站营销工作记录 ------------------------------------------------------------------------------------------------------- MarkupExtension:XAML标记扩展 实现了什么作用:通过扩展标记将一种输入转化为另一种类型的输出 思路: 不直接设置控件的Visib…

工作记录

-------------------------------------------------------------------------------------------------------

MarkupExtension:XAML标记扩展

实现了什么作用:通过扩展标记将一种输入转化为另一种类型的输出

思路:

不直接设置控件的Visibility属性,利用一个标记扩展,传入一个权限值,然后拿这个权限值跟当前程序的用户权限对比,如果控件的权限值高于当前用户权限(比如控件的权限值是管理员,但是当前用户是普通用户),则返回Visibility.Collapsed,反之返回Visibility.Visible。

代码:

[MarkupExtensionReturnType(typeof(Visibility))]
public class PermissionVisibleExtension : MarkupExtension, IPermissionListener
{private FrameworkElement targetObject;private DependencyProperty targetProperty;[ConstructorArgument("authority")]public Authority Authority { get; set; }public PermissionVisibleExtension(){}public PermissionVisibleExtension(Authority authority){Authority = authority;}public override object ProvideValue(IServiceProvider serviceProvider){try{var providerValuetarget = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));//控件对象targetObject = (FrameworkElement)providerValuetarget.TargetObject;//元素布局事件targetObject.Loaded += TargetObject_Loaded;//元素删除事件targetObject.Unloaded += TargetObject_Unloaded;//标记的控件属性targetProperty = (DependencyProperty)providerValuetarget.TargetProperty;PermissionService.AddListener(this);return PermissionService.Authority >= Authority ? Visibility.Visible : Visibility.Collapsed;}catch (Exception){return Visibility.Collapsed;}}private void TargetObject_Loaded(object sender, RoutedEventArgs e){PermissionService.AddListener(this);PermissionChanged(PermissionService.Authority);}private void TargetObject_Unloaded(object sender, RoutedEventArgs e){PermissionService.RemoveListener(this);}public void PermissionChanged(Authority authority){targetObject.SetCurrentValue(targetProperty, PermissionService.Authority >= Authority ? Visibility.Visible : Visibility.Collapsed);}
}

其中IPermissionListener是提供了权限变更处理方法的接口:

public interface IPermissionListener
{void PermissionChanged(Authority authority);
}

PermissionService是程序的权限管理类,保存着相关控件的扩展标记,提供了挂载方法:

private static readonly List<IPermissionListener> listeners = new List<IPermissionListener>();
public static void AddListener(IPermissionListener listener)
{if (!listeners.Contains(listener)){listeners.Add(listener);}
}public static void RemoveListener(IPermissionListener listener)
{if (listeners.Contains(listener)){listeners.Remove(listener);}
}

当PermissionService类中的用户权限改变时,会遍历listeners 中的扩展,触发PermissionChanged方法:

 private static void OnPermissionChanged(){foreach (var it in listeners){//authority是当前类中的属性,表示用户权限it.PermissionChanged(authority);}}

每个扩展中的PermissionChanged方法:

public void PermissionChanged(Authority authority)
{targetObject.SetCurrentValue(targetProperty, PermissionService.Authority >= Authority ? Visibility.Visible : Visibility.Collapsed);
}

通过控件直接设置属性值实现改变控件可见状态;

前端写法:

 Visibility="{view:PermissionVisible Authority=Expert}">

引用:笔记:WPF中MarkupExtension使用的IServiceProvider参数都有哪些_wpf iserviceprovider-CSDN博客

WPF基础之Binding解析_calcbinding-CSDN博客

http://www.dtcms.com/a/546564.html

相关文章:

  • 揭阳网站制作服务龙岩正规全网品牌营销招商
  • 成都市网站建设哪家好怎么建设个人博客网站
  • wordpress没法做大网站wordpress 能承受多大并发访问
  • wordpress做大型网站北京网站制作网络推广公司
  • yarn报错:info no lockfile found
  • 湛江网站建设方案服务网站开发文献翻译
  • 国土资源部门网站建设制度郑州网站免费制作
  • 循环神经网络实现文本情感分类案例
  • Common Go Mistakes(Ⅱ 数据类型)
  • 图书馆 网站建设网络营销托管服务商指的是
  • 怎么做自己的网站wordpress打开网页耗内存
  • [MySQL]表——用户管理
  • mysql 配置引起的报错
  • 免费企业自助建站app推广赚佣金
  • 10.29 ArkTS函数
  • 网站建设费用预算模板网络安全服务机构
  • 渐开线花键参数一般是怎么确定的?
  • Unity 将地图分割为可自定义的矩形区域来管理物体的插件
  • php做网站的技术难点大数据营销 全网推广
  • 产品展示型网站建设公司网站设计 上海
  • 【JavaEE初阶】TCP核心机制4——滑动窗口
  • FEMU—NVMe ZNS 核心实现的学习
  • 做结构图的网站云南做网站哪家便宜
  • 甘肃古典建设集团有限公司网站要想让别人网站卖我的东西怎么做
  • 深入理解Java String:不可变性、内存机制与高效操作
  • 仓颉GC调优参数:垃圾回收的精密控制艺术
  • 小学生做网站步骤wordpress 调用媒体库
  • 徐州营销型网站制使做网站广告联盟赚钱
  • 常州网站营销推广免费科技软件
  • 如何使用框架来建设网站常州网站排名优化