我曾經爲我自己設計過一個非常基本的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'樹來解決這個問題,這樣就不會出現沒有可視化表示的子項的問題。 –
地獄誰低估了這個? –