C# 绑定到ContextMenu.IsOpen时,WPF上下文菜单在第一次调用时在屏幕左上角闪烁

C# 绑定到ContextMenu.IsOpen时,WPF上下文菜单在第一次调用时在屏幕左上角闪烁,c#,wpf,contextmenu,C#,Wpf,Contextmenu,我已经解决了这个问题,但在我看来,这个解决方案是违反直觉的,所以我为其他遇到这个问题的人写这篇文章 下面是一个视图模型,其属性为ShouldShow,它将绑定到视图中的关联菜单: public class VMMain : INotifyPropertyChanged { private bool shouldShow; public event PropertyChangedEventHandler PropertyChanged; public bool Shou

我已经解决了这个问题,但在我看来,这个解决方案是违反直觉的,所以我为其他遇到这个问题的人写这篇文章

下面是一个视图模型,其属性为
ShouldShow
,它将绑定到视图中的关联菜单:

public class VMMain : INotifyPropertyChanged
{
    private bool shouldShow;

    public event PropertyChangedEventHandler PropertyChanged;

    public bool ShouldShow
    {
        get { return shouldShow; }
        set
        {
            shouldShow = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ShouldShow)));
        }
    }
}
下面是xaml:

<Window x:Class="TestContextMenuBug.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestContextMenuBug"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Grid Background="Transparent">
        <Grid.ContextMenu>
            <ContextMenu IsOpen="{Binding ShouldShow}">
                <MenuItem Header="Menu Item" />
            </ContextMenu>
        </Grid.ContextMenu>
    </Grid>
</Window>


首次在此窗口中单击鼠标右键时,关联菜单将在屏幕左上角短暂闪烁。所有后续的点击都能正常工作。

谢天谢地,这个问题的解决方法很简单

private bool shouldShow=true

将支持变量初始化为
true
可解决此问题。不过,我的解决方案与直觉相反,我的上下文菜单最初没有打开,所以为什么要将绑定到
IsOpen
的属性初始化为
true