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}"/>
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top