2012-01-04 75 views
1

我有以下非常簡單的代碼,當然,奮力:指定圖片的來源

<Image Source="Resources\data_store.png"/> 

的事情是,我現在已經從屬性(「名稱」)採取串這是作爲一個的ItemSource,我不對象設法得到綁定到它

我嘗試了這些,但沒有工作:

<Image Source=name/> 
<Image Source=Path="name"/> 
<Image Source=Path=name/> 
<Image Source={Path="name"}/> 
<Image Source={Path=name}/> 
<Image Source={Binding name}/> 

我的目標是在C#代碼隱藏設置,我不認爲這改變了一些...

回答

2

在後面的代碼,請確保您定義源物業:

public string Name{get;set;} 

然後結合的工作方式如下:

<Image Source="{Binding Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" /> 

如果要動態更新的形象,你會需要實現INotifyPropertyChanged並在圖像更改時調用PropertyChanged

+0

這不起作用,Source不是字符串類型。 – ColinE 2012-01-04 15:31:06

+0

至少在Silverlight中,這是行得通的,因爲綁定引擎能夠將字符串轉換爲URI – Nuffin 2012-01-04 15:34:58

+0

它似乎可行,但我沒有任何圖像。我的感覺是你的代碼是正確的,但我的字符串就像「Resources \\ data_store.png」,有一個雙/我覺得這是在轉換失敗,我說得對嗎? – 2012-01-04 15:39:26

1

XAML解析器在碰到時非常聰明:

<Image Source="Resources\data_store.png"/> 

它知道Source屬性是ImageSource,並將使用合適的轉換器來加載指定的資源。如果您需要在代碼隱藏或綁定中設置圖像源,則需要通過值轉換器自行完成。下面的值轉換器將做的伎倆:

public classImageUriConverter : IValueConverter 
{ 
    publicImageUriConverter() 
    { 
    } 

    public objectConvert(objectvalue, TypetargetType, objectparameter, System.Globalization.CultureInfo culture) 
    { 
     Urisource = (Uri)value; 
     return newBitmapImage(source); 
    } 

    public objectConvertBack(objectvalue, TypetargetType, objectparameter, System.Globalization.CultureInfo culture) 
    { 
     throw newNotImplementedException(); 
    } 

} 

致謝this blog post

+0

我不知道這是聰明的,因爲如果我用「pgn」誤寫了「png」,例如,我沒有任何錯誤,但是在執行項目時根本沒有任何圖像!無論如何,我不知道我在代碼隱藏方面/如何使用代碼。 – 2012-01-04 15:35:24