WPF Menuitem 헤더 및 Headertemplate
-
23-08-2019 - |
문제
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>
...
제휴하지 않습니다 StackOverflow