crianças WPF MenuItem não mostrando
-
06-09-2019 - |
Pergunta
Eu estou usando um ObjectDataProvider e um DataTemplate para preencher um MenuItem dentro da minha barra de Menu. (WPF, C # / XAML) Ver snipet abaixo.
Resultado: O item aparece menu superior, quando eu clicar nele, o item de menu de embrulho (aquele com o texto do cabeçalho ligado) aparece junto com uma pequena seta indicando a presença de crianças, mas pairando ou clicando na seta não mostra as crianças, eles não podem ser acessados.
Resultado esperado:. As crianças são visíveis e se comportar adequadamente
trechos:
<ObjectDataProvider x:Key="Brokers" ObjectInstance="{x:Static brokers:BrokerManager.Instance}" MethodName="GetBrokers" IsAsynchronous="True" />
<DataTemplate x:Key="BrokerMenuItem" DataType="IBroker">
<MenuItem Header="{Binding Path=Name}">
<MenuItem Header="Connect" />
<MenuItem Header="Disconnect" />
</MenuItem>
</DataTemplate>
<MenuItem Header="Brokers" ItemsSource="{Binding Source={StaticResource Brokers}}" ItemTemplate="{DynamicResource BrokerMenuItem}"/>
Solução 2
Depois de procurar por mais de uma semana, eu finalmente encontrei como fazer este trabalho corretamente. Acontece DataTemplates não funcionam muito grande para menus dinâmicos. A maneira correta de fazer isso é usar a propriedade ItemContainerStyle de MenuItem. (Ou é que ItemStyleContainer?)
Basta criar um estilo para substituir o cabeçalho e configurá-lo para o que você precisa. Eu lhes cancelou o ItemsSource para incluir meus filhos. No entanto ter cuidado aqui, como os filhos herdarão o estilo e cada um tem as mesmas crianças e gerar um menu recursiva. Você precisará substituir o ItemsSource de seus filhos e configurá-lo para um x vazio:. Matriz ou os gostos
Existem vários blogs lá fora, que descrevem como usar ItemContainerStyle, vê-los.
Outras dicas
arsenmrkt: Eu tenho exatamente o mesmo problema, se eu preencher um MenuItem usando um DataTemplate eu não posso parecem acrescentar filhos a qualquer um desses itens gerados. Eu não entendo a sua resposta, porém, como eu deveria usar o ContentPresenter de contornar este problema?
EDIT: Na verdade, o meu problema was'nt exatamente o mesmo, desde que eu estou tentando ligar uma coleção de coleções para um menu. Acho que chegou a funcionar, embora usando o HierarchicalDataTemplate:
<Menu>
<MenuItem Header="{Binding Name}" ItemsSource="{Binding MenuOptions}">
<MenuItem.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Categories}">
<MenuItem Header="{Binding Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Isso vai ajudar você NicholasF?
ItemSource propriedade do controle menuitem é usado para dar Childes para esse item, tente usar <ContentPresenter />
com que datatemplate.