WPF 显示图像动态 URI

本文关键字:动态 URI 图像 显示图 显示 WPF | 更新日期: 2023-09-27 18:34:54

我有一个自定义用户控件,它必须根据我的用户控件绑定到的属性的值"动态"显示图像。

   <Image Source="Resources/{0}.png" />

图像的源属性不完整:应以某种方式将缺失值{0}替换为我的模型的值以检索图像。

如何在 wpf 中实现此目的?谢谢

WPF 显示图像动态 URI

我使用值转换器解决了:

 public class ImageSelector : IValueConverter
 {
     public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
     {
         if( value == null )
             return null;
         string basePath = System.IO.Path.Combine( Directory.GetCurrentDirectory(), @"Resources'Devices" );
         string imageName = String.Format( "{0}.png", value.ToString() );
         string imageLocation = System.IO.Path.Combine( basePath, imageName );
         if( !File.Exists( imageLocation ) )
            imageLocation = System.IO.Path.Combine( basePath, "ImageUnavailable.png" );
         return new BitmapImage( new Uri( imageLocation ) );
     }
     public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
     {
         throw new NotImplementedException();
     }
}

XAML:

 <UserControl.Resources>
        <local:ImageSelector x:Key="imageSelector"/>
 </UserControl.Resources>
 ...
 <Image Source="{Binding Converter={StaticResource imageSelector}}"/>

您可以通过向视图模型添加另一个属性来解决此问题。

查看型号代码:

    private string _yourProperty;
    public string YourProperty
    {
        get { return _yourProperty; }
        set
        {
            if (_yourProperty == value) return;
            _yourProperty = value;
            OnPropertyChanged("YourProperty");
            OnPropertyChanged("YourImageSource");
        }
    }
    //this code is just for demo.
    public BitmapImage YourImageSource
    {
        get
        {
            return new BitmapImage(BuildUriFromYourProperty());
        }
    }

Xaml 代码:

<Image Source="{Binding YourImageSource}"/>