パス文字列からImageSource
を作成して返すようにIValueConverter
を使用してください。例えば;あなたの画像(desert.jpeg、penguins.jpg)はルートフォルダのImagesフォルダにあります。画像にはBuild Action Type to Content, and Copy To Output Directory to Always
を設定してください。
<local:UriToImgConverter x:Key="UriToImgCnvKey"/>
<Image x:Name="ImgCtrl" Source="{Binding Img, Mode=OneWay,Converter={StaticResource UriToImgCnvKey}}"/>
コード:
ImgViewModel vm1 = new ImgViewModel () ;
ImgCtrl.DataContext = vm1;
vm1.Img = "Images/Desert.jpg";
のViewModel /コンバーターコード:
public class ImgViewModel:INotifyPropertyChanged
{
string _path ;
public string Img {
get { return _path; }
set { _path = value; OnPropertyChanged("Img"); }
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void OnPropertyChanged(string prop)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public class UriToImgConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
BitmapImage img = new BitmapImage(new Uri(value.ToString(), UriKind.Relative));
BitmapFrame frame = BitmapFrame.Create(img);
return frame;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
どのようにして、プログラム 'UriSource'を変更できますか?変更したC#コードを表示できますか? –
BitmapImageを実際にImage要素のSourceに渡すことができます。 –
public ImageSource FileToImageSource(Uriファイル、int DecodeSize = 300) { BitmapImage bitmap = new BitmapImage(File); bitmap.DecodePixelWidth = DecodeSize; bitmap.Freeze(); 戻りビットマップ。 } –