编程语言
首页 > 编程语言> > c#-使用IValueConverter动态加载图像源

c#-使用IValueConverter动态加载图像源

作者:互联网

我在使用IValueconverter时遇到问题,并动态加载了行网格图像:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

    string Type = (string)value;
    Uri uri;
    try
    {
        uri = new Uri("/XConsole;component/Images/" + Type + ".png", UriKind.Relative);
        return new System.Windows.Media.Imaging.BitmapImage(uri) { CacheOption = BitmapCacheOption.None };
    }
    catch (Exception e)
    {
        //donothing
    }
    uri = new Uri("/XConsole;component/Images/Type_SYSTEM.png", UriKind.Relative);
    return new System.Windows.Media.Imaging.BitmapImage(uri) { CacheOption = BitmapCacheOption.None };

}

我想传递给对象的“类型”转换器并加载不同的图像:

 <Image Grid.Column="0"  Width="25" Height="25" Margin="2,0" Source="{Binding Path=Type, Converter={StaticResource imageConverter}}" >

但是出了点问题,因为没有照片加载!

如果我静态加载,也可以:

 <Image Grid.Column="0"  Width="25" Height="25" Margin="2,0" Source="/XconsoleTest;component/Images/Type_DB.png" >

我在UserControl.Resources中加载了转换器

<UserControl.Resources>
    <converters:ImageConverter x:Key="imageConverter"/>
</UserControl.Resources>

帮我!!

解决方法:

如果用代码创建URI,则必须编写完整的Pack URI,包括pack:// application:,,, part.在XAML中,这不是必需的,因为它是由字符串到ImageSource TypeConverter自动添加的.

var type = (string)value;
var uri = new Uri("pack://application:,,,/XConsole;component/Images/" + type + ".png");

请注意,上面的代码示例使用小写的类型标识符而不是Type,以避免与Type类混淆.

标签:imagesource,ivalueconverter,imultivalueconverter,wpf,c
来源: https://codeday.me/bug/20191031/1974427.html