将XAML可见性属性绑定到Thread.CurrentPrincipal
本文关键字:Thread CurrentPrincipal 绑定 属性 XAML 可见性 | 更新日期: 2023-09-27 18:03:07
在我的WPF客户端应用程序中,我使用GenericIdentity
来保证安全性:
GenericIdentity MyIdentity = new GenericIdentity("Identity");
String[] MyStringArray = { "Admin", "Editor" };
GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyStringArray);
现在我想根据用户角色显示/隐藏WPF对象。我已经尝试了几种方法,例如:
Visibility="{Binding Source=Thread.CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"
使转换器中的'value'对象成为"Thread "类型的字符串。
Visibility="{Binding Path=Thread.CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"
和
Visibility="{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"
,它完全跳过了转换器。这是我的第一个c#/.net程序,所以我在这方面的知识并不多,如果你能给我一个解决方案,我将不胜感激。谢谢!
首先,要访问静态属性,您需要使用x:Static
标记扩展名:
Visibility="{Binding Source={x:Static Threading:Thread.CurrentPrincipal},
Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Admin}"
假设您有
xmlns:Threading="clr-namespace:System.Threading;assembly=mscorlib"
在XAML的根元素上。
第二,你没有展示你如何设置本金,但你必须使用AppDomain.SetThreadPrincipal()
来做。
第三,您将角色设置为Admin
,但随后检查Administrator
。
在代码隐藏(c#)中,您需要将控件的DataContext
设置为包含Thread.CurrentPrincipal
的对象。然后在XAML中,使用第二种方法。