9

KeyValuePairのリストをMenuItemのリストにバインドしたいと思います。MenuIten.HeaderTemplateを使用する必要があると思いましたが、機能しませんでした。空白のヘッダーしかありません。

            <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>

次に、MenuItem.HeaderTemplateをMenuItem.Headerに置き換えましたが、機能しました。

            <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>

ここでHeaderTemplateが機能しない理由を誰かに説明してもらえますか?

4

4 に答える 4

15

ミカは正しいです。最初のアプローチでは、メニュー項目にそれ自体をテンプレート化する方法を説明しましたが、どのデータにバインドするかについては説明しませんでした。次の作品:

            <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>
于 2010-01-29T15:14:16.417 に答える
9

HeaderTemplateは、メニュー項目にバインドされているデータにアクセスできないためです。

于 2009-05-22T18:26:07.837 に答える
1

テンプレートの目的は、VisualTreeにいくつかの要素を追加することです。DataTemplateは、サブアイテム([Sub] MenuItem、ListBoxのListBoxItemなど)に使用され、アイテムホルダーに適用されます。これは、コントロール自体に適用されるControlTemplateとは異なります。これで実際にしたこと

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

「MenuItemのコンテンツを取得してデータを挿入したいのですが、視覚化する必要があります」と言っています。次に、この挿入されたドットを挿入します。

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

したがって、現在反復しているメニュー項目に追加のメニュー項目を挿入しています。要点がわかりません。次はもっと明確です:

 <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>
于 2011-10-11T09:50:29.607 に答える
0

HeaderTemplate定義は、直接UIコンテンツではなく、DataTemplateである必要があります。

...
<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>
...
于 2009-05-26T10:33:07.667 に答える