Удалить галочку из MenuItems?

У меня есть контекстное меню, которое появляется, когда пользователь щелкает правой кнопкой мыши, и содержит два пункта меню. Первый элемент имеет галочку вместо значка, а затем ставится галочка, в зависимости от того, какой из них нажимается при следующем щелчке правой кнопкой мыши. У меня и IsCheckable, и IsChecked установлено значение "False", но флажок по-прежнему отображается. Не уверен, что я делаю не так, есть идеи?

Это первый раз, когда я щелкаю правой кнопкой мыши, мне не нужна эта галочка там.

Первый щелчок правой кнопкой мыши

Это то, что показывает, выбрал ли я "добавить точку" в первый раз, и снова щелкнул правой кнопкой мыши. Это должно показывать это каждый раз, но если я когда-либо нажму "добавить известный объект", флажок всегда появляется.

После второго щелчка правой кнопкой мыши после нажатия добавить точку

                <ContextMenu Name="nodeContextMenu" >
                    <MenuItem x:Name="ko" IsCheckable="False" IsChecked="False" Header="Add Known Object" Click="Ko_Click" >
                        <MenuItem.Icon>
                            <Image Source="ko.png" Height="7.5" Width="7.5" />
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem x:Name="wa" IsCheckable="False" IsChecked="False" Header="Add Waypoint" Click="Wa_Click" >
                        <MenuItem.Icon>
                            <Image Source="w.png" Height="7.5" Width="7.5" />
                        </MenuItem.Icon>
                    </MenuItem>
                </ContextMenu>

2 ответа

Я нашел, что различные сложные решения WPF для избавления от галочки пункта меню были действительно болезненными, поэтому я отказался от них всех. Вместо этого я решил это очень простым способом, имея два пункта меню для того, что фактически является одним элементом меню во время выполнения, и использую Visibility=Collapsed для чередования между ними во время выполнения. Это невероятно просто, используете ли вы привязки или события.

Я имел обыкновение иметь эти пункты меню в качестве переключателей, и у меня был метод, связанный с переключателями, который выполнял функцию, используя метод.IsChecked. Я забыл об этом, и каждый раз проверял первый пункт. Так что я просто избавился от этого, и он отлично работает. Ниже приведен фрагмент кода, вызывающий его:

knownObjectMenuItem.IsChecked = //random stuff
Другие вопросы по тегам