您好我发现了这个问题
How to manipulate WPF GUI based on user roles
并将他的答案应用于我的项目。我正在实施相同的行为。
但事情是属性绑定不起作用。
我创建RoleToVisibilityConverter类并进行一些测试,调用convert
RoleToVisibilityConverter conv = new RoleToVisibilityConverter();
conv.Convert((object)Thread.CurrentPrincipal,cbo_organismo.GetType(),(object)"editor",System.Globalization.CultureInfo.CurrentCulture);
这项工作找到了,然后我将资源添加到我的usercontrol
<UserControl.Resources>
<fundafe:RoleToVisibilityConverter x:Key="roleConverter"/>
</UserControl.Resources>
并绑定到我的按钮控件
<Button Margin="0,0,0,0" Visibility="{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource roleConverter}, ConverterParameter=editor}" VerticalAlignment="Center" HorizontalAlignment="Left" Name="btn_Eliminar" Click="btn_Eliminar_Click" Width="Auto" Height="25" Background="Transparent" BorderBrush="Transparent">
<Image Name="img_eliminar" Width="48" Source="imagenes/borrar.png" Height="19" />
</Button>
运行我的应用程序后,该按钮仍然可见。
如果我正在对Visibility属性进行硬编码,则隐藏按钮
btn_Eliminar.Visibility=(Visibility)conv.Convert((object)Thread.CurrentPrincipal,cbo_organismo.GetType(),(object)"editor",System.Globalization.CultureInfo.CurrentCulture)
有什么建议吗?
注意: 我不能使用最后一种方法,因为在我的实际场景中,按钮是ListView的DataTemplate的一部分,即使使用TreeHelper捕获按钮,ListView也只会因为虚拟化而将更改应用于第一项
答案 0 :(得分:2)
假设这是您的代码逐字,看起来Button
上的绑定错误。你有这个:
{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource roleConverter}, ConverterParameter=editor}
请注意,您已将Thread.CurrentPrincipal
作为来源绑定,但您也将Path
设置为CurrentPrincipal
。这相当于Thread.CurrentPrincipal.CurrentPrincipal
,显然无法绑定。
老实说,我很确定你需要在{x:Static}
附近Thread.CurrentPrincipal
。此外,这意味着您需要声明System.Threading
的命名空间。假设您将命名空间定义为“systhreading”,因此最终绑定将是:
{Binding Source={x:Static systhreading:Thread.CurrentPrincipal}, Converter={StaticResource roleConverter}, ConverterParameter=editor}