在我的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.CurrentPrincipal”的字符串,也尝试过:
Visibility="{Binding Path=Thread.CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"
和
Visibility="{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"
完全跳过转换器。 这是我的第一个C#/ .net程序,所以我在该领域并没有太多的知识,非常感谢一个解决方案。谢谢!
答案 0 :(得分:2)
首先,要访问静态属性,您需要使用x:Static
markup extension:
Visibility="{Binding Source={x:Static Threading:Thread.CurrentPrincipal},
Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Admin}"
这假设你有
xmlns:Threading="clr-namespace:System.Threading;assembly=mscorlib"
在XAML的根元素上。
其次,您不会显示您如何设置主体,而是you have to do it using AppDomain.SetThreadPrincipal()
。
第三,您将角色设置为Admin
,然后检查Administrator
。
答案 1 :(得分:0)
在代码隐藏(C#)中,您需要将控件的DataContext
设置为包含Thread.CurrentPrincipal
的对象。然后在XAML中,你是第二种方式。