Pergunta

Eu quero vincular uma lista de KeyValuePair a uma lista de MenuItems. Eu pensei que eu deveria usar MenuIten.HeaderTemplate, mas não funcionou. Eu só tenho cabeçalhos em branco.

            <MenuItem 
                Header="Template" 
                ItemsSource="{Binding Path=Samples}">
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <MenuItem>
                            <MenuItem.HeaderTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                        <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="5,0,0,0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </MenuItem.HeaderTemplate>                            </MenuItem>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>

Então eu substituído MenuItem.HeaderTemplate com MenuItem.Header, funcionou.

            <MenuItem 
                Header="Template" 
                ItemsSource="{Binding Path=Samples}">
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <MenuItem>
                            <MenuItem.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                    <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="2,0,0,0"/>
                                </StackPanel>
                            </MenuItem.Header>
                        </MenuItem>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>

Alguém pode me explicar por que HeaderTemplate não funciona aqui?

Foi útil?

Solução

Porque o HeaderTemplate não tem acesso a essa informação ser ligado ao item do menu.

Outras dicas

Micah está correto. Na primeira abordagem eu disse o item de menu como ao modelo em si, mas nunca disse que os dados que se liga a! As seguintes obras:

            <MenuItem 
            Header="Template" 
            ItemsSource="{Binding Path=Samples}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding}">
                        <MenuItem.HeaderTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                    <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="5,0,0,0"/>
                                </StackPanel>
                            </DataTemplate>
                        </MenuItem.HeaderTemplate>
                     </MenuItem>
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>

O objetivo do o modelo é adicionar alguns elementos para o VisualTree. DataTemplate é usado para as sub-itens ([SUB] MenuItem, ListBoxItem na listagem, e assim por diante) e é aplicado ao suporte de artigos, que é contrário ao ControlTemplate, wich é aplicada ao próprio controlo. O que você realmente fez por este

<MenuItem 
            Header="Template" 
            ItemsSource="{Binding Path=Samples}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                       ....
   </DataTemplate>
  </MenuItem.ItemTemplate>
</MenuItem>

está dizendo "Eu quero tomar MenuItem conteúdo e inserir os dados, wich devem ser visualizadas". E, em seguida, inserir este pontos Insted:

 <MenuItem Header="{Binding}">... </MenuItem>

Então, você está inserindo item de menu adicional para o item de menu actualmente iteração. Eu não posso ver o ponto. Em seguida é mais clara:

 <MenuItem Header="Template" ItemsSource="{Binding Samples}">
         <MenuItem.Resources>
            <Style TargetType="{x:Type MenuItem}">
               <Setter Property="Command" Value="{Binding SomeCommand}" />
            </Style>            
        </MenuItem.Resources>
       <MenuItem.ItemTemplate>
          <DataTemplate>
              <TextBlock Text="{Binding Name}" />
          </DataTemplate>             
       </MenuItem.ItemTemplate>
    </MenuItem>

A definição HeaderTemplate deve ser um DataTemplate, não direta conteúdo UI:

...
<MenuItem.HeaderTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
            <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="2,0,0,0"/>
        </StackPanel>
    </DataTemplate>
</MenuItem.HeaderTemplate>
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top