2010-07-30 58 views
3

我已經在我的ResourceDictionary中定義的BitmapImage的那樣:StaticResource標記擴展與System.Windows.Application.FindResource

<BitmapImage x:Key="Skin_Image_Back" UriSource="./images/back.png" /> 

和加載的ResourceDictionary像

var dict = Application.LoadComponent(
    new Uri("TestProject.DefaultStyle;component/Style.xaml", 
    UriKind.Relative)) as ResourceDictionary; 
Application.Current.Resources.MergedDictionaries.Add(dict); 

當我分配通過xaml和StaticResource標記擴展的圖像,如

<Image Source="{StaticResource Skin_Image_Back}" /> 

e一切都很好。

但是當我想通過從源設置圖像:

MyObject.ImageUrl = FindResource("Skin_Image_Back").ToString(); 

FindResource返回一個URI,它獲取通過轉換器結合的像

<Image Source="{Binding ImageURL, Converter={StaticResource StringToImageThumbSourceConverter}}" /> 

"pack://application:,,,/TestProject.DefaultStyle;component/images/back.png" 

其中的ToString結果

實施爲

<Converter:StringToImageThumbSource x:Key="StringToImageThumbSourceConverter" /> 

public class StringToImageThumbSource : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     try { 
      if(value != null) { 
       string s = value.ToString(); 
       if(!string.IsNullOrEmpty(s) && File.Exists(s)) { 
       BitmapImage bi = new BitmapImage(); 

       bi.CreateOptions = BitmapCreateOptions.DelayCreation; 
       bi.BeginInit(); 
       if(parameter is int) { 
        bi.DecodePixelWidth = (int)parameter; 
        bi.DecodePixelHeight = (int)parameter; 
       } 
       bi.UriSource = new Uri(value.ToString()); 
       bi.EndInit(); 
       return bi; 
       } 
      } 
     } catch { 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
    } 

那麼它不工作...但是爲什麼呢?

回答

0

該死的是我笨...

if(!string.IsNullOrEmpty(s) && File.Exists(s)) 

File.Exists無法檢查包:// ,,, - URL的...所以它永遠不會被評估...

認爲我有關閉該問題...或刪除它...不知道該怎麼辦...