我曾经为我自己设计过一个非常基本的WPF练习,也就是从ViewModel动态填充菜单,我遇到了一个奇怪的问题。考虑下面的主窗口中的标记:WPF DataTemplates - 为什么渲染的区别?
<Window x:Class="Demosne.Client.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:project="clr-namespace:Demosne.Client.WPF">
<Grid>
<Menu Height="26" Name="menu1" VerticalAlignment="Top" HorizontalAlignment="Stretch" ItemsSource="{Binding MainMenuItems}">
<Menu.ItemTemplate>
<HierarchicalDataTemplate >
<MenuItem Header="{Binding Text, Mode=OneTime}" ItemsSource="{Binding MenuItems}"/>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
<!--<MenuItem Header="File" />
<MenuItem Header="Edit" />-->
</Menu>
</Grid>
和视图模型(S):
public class MainWindowViewModel
{
private IList<MenuItemViewModel> _menuItems = new List<MenuItemViewModel>()
{
new MenuItemViewModel() { Text = "File" },
new MenuItemViewModel() { Text = "Edit" }
};
public IList<MenuItemViewModel> MainMenuItems
{
get
{
return _menuItems;
}
}
}
public class MenuItemViewModel
{
public string Text { get; set; }
public IList<MenuItemViewModel> MenuItems
{
get
{
return _menuItems;
}
}
private IList<MenuItemViewModel> _menuItems = new List<MenuItemViewModel>();
}
我希望GUI来准确再现两个commented-的结果在标记中出现两行 - 两个菜单项称为文件和编辑。
然而,纸版奇怪的行为鼠标悬停:
标记版本:
绑定版本:
为什么他们有什么不同?
我认为这应该帮助你。同样的问题。 http://weblogs.asp.net/okloeten/archive/2007/11/14/5149692.aspx –
情况类似,但不完全相同。我想在阅读这篇文章之前我必须再读几遍这篇文章。我认为'HierarchicalDataTemplate'应该通过隐式地创建一个'MenuItem'树来解决这个问题,这样就不会出现没有可视化表示的子项的问题。 –
地狱谁低估了这个? –