将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程序,所以我在这方面的知识并不多,如果你能给我一个解决方案,我将不胜感激。谢谢!

将XAML可见性属性绑定到Thread.CurrentPrincipal

首先,要访问静态属性,您需要使用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中,使用第二种方法。