Maintenant, je comprends votre problème. Généralement je pense que ce serait une très mauvaise idée de définir la propriété de contenu pour chacun de vos menusItems dans le fichier XAML. Spécialement quand vous traitez avec des centaines d'articles. Une meilleure façon est d'utiliser la fonctionnalité de liaison de données de WPF et DataTemplates, pas de coder en dur les noms de menuItem dans le fichier XAML. Je vais propulser deux solutions pour votre problème. La première solution utilise l'approche code-behind pour créer des éléments de menu, puis les lier à la propriété ItemsSource de MainMenu sans utiliser dataTemplates. le code suivant est le code-behind code pour la fenêtre:
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;
}
}
dans ce premier code que nous avons créé 40 nombre de menuItems puis nous les lier à la propriété DataContext de l'objet MainMenu. le code suivant montre le code XAML des fenêtres dont il est l'objet 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>
dans ce approch vous pouvez d'abord créer tous vos éléments de menu et leurs noms dans le code et après qui les lient à l'objet Menu. Vous pouvez ensuite utiliser des styles pour définir les propriétés communes des éléments de menu.
mais une meilleure solution consiste à utiliser dataTemplates comme je l'ai fait dans le code suivant. Dans cette approche, vous avez d'abord créé une classe pour stocker les noms de vos éléments de menu. puis, à l'aide de la fonction de modèle de données de WPF, vous pouvez les lier à vos éléments MainMenu. le code-behind de cette solution est la suivante:
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;
}
}
dans ce code je la classe CustomMenuItem pour stocker les noms MenuItem. le constructeur MainWindows est disponible pour créer les menuitems mais vous pouvez les récupérer à partir d'autres sources, comme un fichier XML de base de données.le code XAML pour la MainWindow est comme ceci:
<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>
cette façon, vous pouvez récupérer vos noms menuitem fot exemple \ r à partir d'un fichier XML ou d'autres sources de données et ils ne sont pas hardcoded dans votre fichier XAML. Vous pouvez ensuite utiliser les fonctionnalités puissantes de DataTemplates pour afficher vos éléments de menu comme vous le souhaitez.
Désolé, je suis peut-être un peu confus .. J'ai déjà créé les MenuItems et ils sont basés sur le Setter que j'ai créé ... Le problème est .. Je veux maintenant que chacun soit encore basé sur ce Setter, mais pour avoir un "Content"/Nom unique qui s'affiche pour l'utilisateur ... Actuellement, ils ont tous le nom "Content" qui leur a été donné par le setter, mais je cherche un moyen de configurer chaque MenuItem nom du contenu via XAML .. est-ce possible? – Kyle