我有几个这样的菜单项:
<navigation:RadMenuItem Header="New Assignment">
<navigation:RadMenuItem.Icon>
<Image Source="/Images/New_Assignment.jpeg" Width="20" Height="20" />
</navigation:RadMenuItem.Icon>
</navigation:RadMenuItem>
<navigation:RadMenuItem Header="New Course">
<navigation:RadMenuItem.Icon>
<Image Source="/Images/New_Course.jpeg" Width="20" Height="20" />
</navigation:RadMenuItem.Icon>
</navigation:RadMenuItem>
<navigation:RadMenuItem Header="New Folder">
<navigation:RadMenuItem.Icon>
<Image Source="/Images/New_Folder.jpeg" Width="20" Height="20" />
</navigation:RadMenuItem.Icon>
</navigation:RadMenuItem>
请注意,我必须为每个项目设置图标。 (所有图标都在/ Images /文件夹中)那么如何传递参数以便我可以说:
<navigation:RadMenuItem Header="New Assignment" Icon="{Binding ImageCollection, param1=New_Assignment.jpeg}" />
ImageCollection是/ Images /文件夹中的图像集合。
答案 0 :(得分:2)
您的问题有解决方案。
您使用的类型字典&lt; string,ImageSource&gt;像你的ImageCollection变量一样:
public Dictionary< string, ImageSource> ImageCollection{ get; set; }
现在要构建集合,必须使用有效的URI指定正确的ImageSource。
您从基本地址开始,在您的情况下为“/ Images”,以便您可以在代码的某一点更改基址,而不必查找所有出现的图像地址...只是为了方便。 / p>
const readonly string BASE_ADDR = "/Images";
现在您可以开始构建您的图像集:
ImageCollection = new Dictionary< string, ImageSource>
{
{ "New_Assignment", new BitmapImage(BASE_ADDR + "/New_Assignment.jpeg") }
...
...
}
现在在您的XAML中,您可以像这样绑定:
<navigation:RadMenuItem
Header="New Assignment"
Icon="{Binding ImageCollection[New_Assignment]}" />
这应该很好用。快乐的编码。
答案 1 :(得分:0)
我认为理想的方法是使用绑定到Naviation菜单项集合的数据绑定ListBox:
<ListBox DataContext="{Binding MyCollectionOfNavigationItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<navigation:RadMenuItem Header="{Binding Header}" Icon="{Binding ImagePath, Converter={StaticResource PathToImageConverter}}"
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
并将其绑定到可能构造如下的项目集合:
public class NavigationItem {
public string Header { get; set; }
public string ImagePath { get; set; }
}
并使用自定义转换器将图像路径转换为图像(您也可以只使用在代码中创建的图像属性)。
如果这不是一个选项,你可以使用MultiBinding和附加属性来做,但如果你仍然为每个项目写出MultiBinding语法,那就更加冗长了。