我正在尝试创建一个模板,该模板将为 MenuItem 的 ItemSource 的前 10 个项目的 InputGestureText 分配静态值,或者在事件触发后从代码隐藏中执行此操作,但我没有运气尝试获得实际的 MenuItem 对象。
我一直在测试从 MenuItem 触发的不同事件,但是每次我尝试遍历 MenuItem 的 Items 属性时,我都会获取字符串对象而不是 MenuItem 对象,我想要为它的 InputGestureText 分配一个值。
这是上下文菜单的 XAML:
<MenuItem x:Name="ClassNameContext_1"
Header="Suggested Names"
ItemsSource="{Binding Path=DataContext.ClassNameList, Source={x:Reference ImgView}}"
Click="ClassNameContext_Click"
MouseEnter="ClassNameContext_MouseEnter"
SubmenuOpened="ClassNameContext_1_SubmenuOpened"/>
我尝试的源代码:
private void ClassNameContext_1_SubmenuOpened(object sender, RoutedEventArgs e)
{
MenuItem suggestedNames = e.OriginalSource as MenuItem;
if (suggestedNames == null)
return;
suggestedNames.InputGestureText = "TEST";
int index = 0;
foreach (var item in suggestedNames.ItemContainerGenerator.Items)
{
MenuItem blah = item as MenuItem;
var bloo = item.GetType();
var bruh = suggestedNames.ItemContainerGenerator.ContainerFromIndex(index);
}
}
基本上前 10 个项目将被分配从 F1 到 F10 的 InputGestureTexts。
编辑
这不是指定帖子的副本的原因是因为那里的用户正在使用静态创建的 MenuItems,而这里它是从 ItemSource 加载的,它可以动态更改从集合中添加或删除的给定事件。