WPF 显示图像动态 URI
本文关键字:动态 URI 图像 显示图 显示 WPF | 更新日期: 2023-09-27 18:34:54
我有一个自定义用户控件,它必须根据我的用户控件绑定到的属性的值"动态"显示图像。
例
<Image Source="Resources/{0}.png" />
图像的源属性不完整:应以某种方式将缺失值{0}替换为我的模型的值以检索图像。
如何在 wpf 中实现此目的?谢谢
我使用值转换器解决了:
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}"/>