У меня есть контекстное меню, которое появляется, когда пользователь щелкает правой кнопкой мыши и содержит два пункта меню. Первый элемент имеет галочку вместо значка, а затем галочка ставится на тот элемент, который будет нажат в следующий раз, когда пользователь щелкнет правой кнопкой мыши. У меня для 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
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
Style
из-за загруженных тем? Например, ExpressionDark.xaml или что-то еще.Style
может иметь приоритет над тем, как обрабатываетсяIsCheckable
.