現在我明白你的問題了。通常我認爲在XAML文件中爲每個menuItem設置content屬性是一個非常糟糕的主意。特別是當你處理數百個物品時。更好的方法是使用WPF和DataTemplates的數據綁定功能,而不是硬編碼XAML文件中的menuItem名稱。我會爲你的問題提出兩個解決方案。第一個解決方案使用代碼隱藏方法創建菜單項,然後將它們綁定到MainMenu的ItemsSource屬性,而不使用dataTemplates。以下代碼是該窗口的代碼隱藏的代碼:在此代碼
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MenuItems = new ObservableCollection<MenuItem>();
for (int i = 0; i < 40; i++)
{
MenuItem menuItem = new MenuItem();
menuItem.Header = "MenuItem" + i.ToString();
MenuItems.Add(menuItem);
}
MainMenu.DataContext = this;
}
public ObservableCollection<MenuItem> MenuItems
{
get;
set;
}
}
第一,我們創建了40號的菜單項,然後我們將它們綁定到的MainMenu對象的DataContext屬性。下面的代碼顯示了Windows,包括它的XAML代碼是MainMenu的對象:
<Window x:Class="WpfApplication17.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" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Name="MainMenu" ItemsSource="{Binding MenuItems}">
</Menu>
</Grid>
</Window>
在這種計算策略,你可以先創建所有的菜單項和他們的名字在代碼和其綁定到菜單對象之後。那麼您可以使用樣式來設置菜單項的通用屬性。
但更好的解決方案是使用dataTemplates,就像我在下面的代碼中所做的一樣。在這種方法中,首先您創建了一個類來存儲菜單項名稱。然後藉助WPF的數據模板功能,您可以將它們綁定到MainMenu項目。該解決方案的代碼隱藏如下:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MenuItems = new ObservableCollection<CustomMenuItem>();
MenuItems.Add(new CustomMenuItem("Item 1"));
MenuItems.Add(new CustomMenuItem("Item 2"));
MenuItems.Add(new CustomMenuItem("Item 3"));
MainMenu.DataContext = this;
}
public ObservableCollection<CustomMenuItem> MenuItems
{
get;
set;
}
}
public class CustomMenuItem
{
public string Name { get; set; }
public CustomMenuItem(string name)
{
Name = name;
}
}
在這個代碼中,我使用的CustomMenuItem類來存儲菜單項的名稱。 MainWindows構造函數可以創建菜單項,但您可以從其他來源檢索它們,如數據庫的XML文件。在主窗口的XAML代碼是這樣的:
<Window x:Class="WpfApplication17.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication17"
Title="MainWindow" Height="350" Width="525" >
<Window.Resources>
<DataTemplate DataType="{x:Type local:CustomMenuItem}">
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Name="MainMenu" ItemsSource="{Binding MenuItems}">
</Menu>
</Grid>
</Window>
這種方式,你可以從XML文件或從其他數據源檢索FOT \ r例如你的菜單項的名稱和他們沒有硬編碼到你的XAML文件。那麼您可以使用DataTemplates的強大功能以您喜歡的方式查看菜單項。
對不起,也許我有點不清楚.. 我已經創建了MenuItems,它們是基於我創建的Setter ...問題是..我現在想要每個人仍然基於但是要爲用戶顯示唯一的「內容」/名稱......目前,它們都具有由設置者給予它們的「內容」名稱,但我正在尋找一種方法來設置每個MenuItem的內容名稱通過XAML ..這是可能的嗎? – Kyle 2010-05-31 17:58:45