문제

keyvaluepair 목록을 menuitems 목록에 묶고 싶습니다. 나는 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이 여기서 작동하지 않는지 설명 할 수 있습니까?

도움이 되었습니까?

해결책

HeaderTemplate은 메뉴 항목에 바인딩되는 데이터에 액세스 할 수 없기 때문입니다.

다른 팁

미가가 맞다. 첫 번째 접근 방식에서 나는 메뉴 항목에 자체적으로 템플릿을하는 방법을 알려주했지만 어떤 데이터를 묶는 지 말하지 않았습니다! 다음 작품 :

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

목적 템플릿 VisualTree에 일부 요소를 추가하는 것입니다. DataTemplate은 하위 항목 ([sub] menuitem, listboxitem의 ListBoxItem 등)에 사용되며 항목 홀더에 적용되며 ControlTemplate에 위배되며, wich는 제어 자체에 적용됩니다. 당신이 실제로 이것에 의해 한 일

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

HeaderTemplate 정의는 직접 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>
...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top