我为我的菜单控件创建了一个样式,现在我想对所有menuItem使用该样式,但在文本框中使用不同的文本。我想知道我是否可以使用List填充绑定元素...我试过但它不起作用...我错过了什么或者我必须使用别的东西?
List<string> itemArray = new List<string>();
itemArray.Add("label1");
itemArray.Add("label2");
itemArray.Add("label3");
Binding binding = new Binding();
binding.Path = new PropertyPath("itemArray");
this.menu1.SetBinding(TextBox.TextProperty, binding);
并且风格的一部分是,如果它有帮助......:
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Grid>
<Border Name="MainBorder" BorderThickness="2,2,2,0" >
<Grid>
<TextBlock Text="{Binding Path=itemArray}" Margin="30,10,0,0" FontFamily="Arial" FontSize="14" FontWeight="Bold" />
<Image Width="15" Height="15" Source="image.PNG" Margin="-100,0,0,0" />
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
答案 0 :(得分:1)
您正在尝试将文本元素绑定到List<T>
,这将导致类型名称。如果您希望菜单从对象列表中填充自己,请考虑将菜单的ItemsSource
属性绑定到该列表:
<Menu ItemsSource="{Binding ListOfItems}">
<Menu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Text}" Command="{Binding Command}" />
</DataTemplate>
</Menu.ItemTemplate>
</Menu>
在此示例中,每个列表项都是一个对象,其Text
属性显示为显示字符串,而Command
属性是实现ICommand
的对象。当用户选择菜单项时,调用该列表项的Command.Execute
方法;您可以使用RelayCommand
或ReactiveCommand
之类的内容将其转换为方法调用。
这允许平面菜单;对于分层菜单,你必须做一些不同的事情。