C# 将参数传递给图像绑定
我有几个这样的菜单项:C# 将参数传递给图像绑定,c#,wpf,xaml,binding,parameters,C#,Wpf,Xaml,Binding,Parameters,我有几个这样的菜单项: <navigation:RadMenuItem Header="New Assignment"> <navigation:RadMenuItem.Icon> <Image Source="/Images/New_Assignment.jpeg" Width="20" Height="20" /> </navigation:RadMenuItem.Icon> </navigation:Ra
<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/文件夹中的图像集合。我认为理想的方法是使用绑定到导航菜单项集合的数据绑定列表框:
<ListBox DataContext="{Binding MyCollectionOfNavigationItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<navigation:RadMenuItem Header="{Binding Header}" Icon="{Binding ImagePath, Converter={StaticResource PathToImageConverter}}"
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
并使用自定义转换器将图像路径转换为图像(您也可以简单地拥有在代码中创建的图像属性)
如果这不是一个选项,您可能可以使用多重绑定和附加属性来完成,但是如果您仍然要为每个项编写多重绑定语法,那将更加冗长。有一个解决方案 您可以使用
public Dictionary< string, ImageSource> ImageCollection{ get; set; }
现在,您可以开始构建图像集合,如下所示:
ImageCollection = new Dictionary< string, ImageSource>
{
{ "New_Assignment", new BitmapImage(BASE_ADDR + "/New_Assignment.jpeg") }
...
...
}
ImageCollection=newdictionary
{
{“New_Assignment”,新位图图像(BASE_ADDR+“/New_Assignment.jpeg”)}
...
...
}
现在,在XAML中,您可以像这样绑定:
public class NavigationItem {
public string Header { get; set; }
public string ImagePath { get; set; }
}
<navigation:RadMenuItem
Header="New Assignment"
Icon="{Binding ImageCollection[New_Assignment]}" />
这应该很有效。编码愉快。谢谢!这就成功了。但我还有一个问题:我必须手动将图像的大小调整为20宽20高。如何设置图像的宽度和高度属性。可能像:公共字典ImageCollection{get;set;}?不幸的是,字典只适用于成对元组,所以即使您想添加第三个元组,也无法添加第三个元组。这是C#的限制,集合只能由一个元素索引。从长远来看,手动设置图像大小可能是一件好事。。。有时你不能事事顺心=p可以用like图标替换ImageSource吗?你可以在字典中存储任何你喜欢的东西。
<navigation:RadMenuItem
Header="New Assignment"
Icon="{Binding ImageCollection[New_Assignment]}" />