我的WPF项目中有一个ResourceDictionary。整个项目旨在在后台运行。在ResourceDictionary中有一个上下文菜单,代码在这里;
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Commands="clr-namespace:_365Drive.Office365.NotificationManager"
xmlns:tb="http://www.hardcodet.net/taskbar"
xmlns:local="clr-namespace:_365Drive.Office365.NotificationManager">
<LinearGradientBrush x:Key="MenuBackground" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="1" />
<GradientStop Color="White" Offset="0.259" />
</LinearGradientBrush>
<ContextMenu x:Shared="false" x:Key="SysTrayMenu" Name="contextMenu">
<MenuItem Header="Sign in" Command="{Binding ShowAuthForm}" CommandParameter="{Binding}" />
<MenuItem Header="Prompt MFA now" Name="MFA" Command="{Binding ClearMFACacheCommand}" CommandParameter="{Binding}" Visibility="{Binding MFAVisibility}" />
<MenuItem Header="Sign out" Command="{Binding SignOutApplicationCommand}" CommandParameter="{Binding}" />
<Separator />
<MenuItem Header="Update Drive Mappings" Command="{Binding RefreshSettingsCommand}" CommandParameter="{Binding}" />
<Separator />
<MenuItem Header="Exit" Command="{Binding ExitApplicationCommand}" />
</ContextMenu>
</ResourceDictionary>
它背后的代码如下(仅代码片段)
public class NotifyIconViewModel
{
private Visibility visibility = Visibility.Collapsed;
public Visibility MFAVisibility
{
get
{
return ((1) == null ? Visibility.Collapsed : Visibility.Visible);
}
set
{
visibility = value;
}
}
}
代码中还有其他代码,但这与此问题无关。
我想从同一个项目中的其他类更新上面的属性值,但我不知道如何获取与contextMenu绑定的该类的实例。
如果我尝试使用如下代码设置MenuItem可见性,它就不起作用;
public static void DisableMFAMenuitem()
{
System.Windows.Controls.ContextMenu ctxMenu = (System.Windows.Controls.ContextMenu)System.Windows.Application.Current.FindResource("SysTrayMenu");
System.Windows.Controls.ItemCollection items = ctxMenu.Items;
System.Windows.Controls.MenuItem itemtobeRemoved = null;
foreach (var item in items)
{
if (item.GetType() == typeof(System.Windows.Controls.MenuItem))
{
// do your work with the item
if (((System.Windows.Controls.MenuItem)item).Name == "MFA")
{
((System.Windows.Controls.MenuItem)item).Visibility = Visibility.Collapsed; // OR WHATEVER really
}
}
}
}
我认为我在理解方面犯了一些小错误,请问有人可以帮忙吗?
答案 0 :(得分:0)
来自Grx70的评论有帮助。
我不确定我是否理解你在这里想要实现的目标,而是来自 第一眼看到我的猜测是麻烦制造者是 X:共享=&#34;假&#34;属性设置在您的资源上,这意味着每个 FindResource(&#34; SysTrayMenu&#34;)调用将产生一个新的ContextMenu实例 (因此您不会修改任何预先存在的实例)。