2010-02-08 44 views
1

我有幾個菜單項是這樣的:參數傳遞給一個圖像綁定

<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> 

請注意,我要爲每個項目的圖標。 (所有的圖標都在/圖片/文件夾),那麼,如何可以傳遞參數,這樣也許我可以說:

<navigation:RadMenuItem Header="New Assignment" Icon="{Binding ImageCollection, param1=New_Assignment.jpeg}" /> 

凡ImageCollection在/圖片/文件夾的圖像的集合。

回答

2

有問題的解決方案。

您使用<字符串類型,ImageSource的>的字典爲您ImageCollection變量,像這樣:

public Dictionary< string, ImageSource> ImageCollection{ get; set; } 

現在來構建你的收藏,你必須指定一個有效的URI正確的ImageSource。

從你的基地址開始,你的情況是「/ Images」,這樣你就可以在你的代碼的一個地方改變你的基地址,而不必尋找所有出現的圖像地址......只是爲了方便。

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]}" /> 

這應該很好地工作。快樂的編碼。

+0

謝謝!那就是訣竅。但我只有一個問題:我必須手動將圖像的大小設置爲20寬度和20高度。我如何設置圖像的寬度和高度屬性。也許像:public Dictionary ImageCollection {get;組; }? – 2010-02-09 16:40:54

+0

不幸的是Dictionary只能用於配對的元組,所以即使你想要添加第三個元組也是如此。這是C#的限制,即集合只能由一個元素索引。從長遠來看,手動設置圖像的大小可能是一件好事......有時你無法擺脫一切= P – 2010-02-09 22:45:48

+0

ImageSource是否可以用像圖標替換? – 2010-02-10 00:19:09

0

我認爲理想的方式是使用綁定到Naviation菜單項的集合的數據綁定列表框:

<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語法,那將更加冗長。