Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首次使用ItemContainerGenerator后如何正确重新生成菜单项?_C#_Wpf_Xaml - Fatal编程技术网

C# 首次使用ItemContainerGenerator后如何正确重新生成菜单项?

C# 首次使用ItemContainerGenerator后如何正确重新生成菜单项?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个简单的xaml代码菜单,其中有一项包含绑定项集合: <Menu x:Name="Menu" Focusable="False"> <MenuItem DataContext="{Binding Menu.RootItem}" SubmenuOpened="MenuItem_OnSubmenuOpened" ItemsSource="{Binding ElementName=Menu, Path=DataContext

我有一个简单的xaml代码菜单,其中有一项包含绑定项集合:

<Menu x:Name="Menu" Focusable="False">
        <MenuItem DataContext="{Binding Menu.RootItem}" SubmenuOpened="MenuItem_OnSubmenuOpened" 
                  ItemsSource="{Binding ElementName=Menu, Path=DataContext.Menu.Items}" >
        </MenuItem>
    </Menu>
和调用焦点的助手方法

这是第一次很好用。但在那之后,当我调用Focus时,什么都没有发生,Focus返回false。尝试循环该项,但没有成功,因为无法访问该项。没有虚拟化,我尝试使用VirtualzingStackPanel.isVirtualization显式禁用它,但仍然相同。尝试更新Elayout以更新ItemContainerGenerator,但仍然没有更改。我也尝试使用ContainerFromIndex,虽然这是一个很小的变化,但没有实际的区别。 首次使用ItemContainerGenerator后如何正确重新生成菜单项

var root = ((MenuItem) sender);
        var items = root.Items;
        //tried this one without any success to regenerate UI Children
        root.UpdateLayout();

        if (items.Count > 0) {
            if (root.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated) {
                ShowItems(root);
            }
            else {
                EventHandler itemsGenerated = null;
                itemsGenerated = delegate {
                    if (root.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated) {
                        root.ItemContainerGenerator.StatusChanged -= itemsGenerated;
                        ShowItems(root);
                    }
                };
                root.ItemContainerGenerator.StatusChanged += itemsGenerated;
            }
        }
private void ShowItems(MenuItem root) {
        ((MenuItem) root.ItemContainerGenerator.ContainerFromItem(root.Items[0])).Focus();
    }