I've problems with IValueconverter and dynamically load a row grid image:
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 };
}
I want to pass to converter a "Type" of my object and load different images:
<Image Grid.Column="0" Width="25" Height="25" Margin="2,0" Source="{Binding Path=Type, Converter={StaticResource imageConverter}}" >
But there is something wrong because no picture are loaded!
if i load statically, it' s ok:
<Image Grid.Column="0" Width="25" Height="25" Margin="2,0" Source="/XconsoleTest;component/Images/Type_DB.png" >
i loaded my converter in UserControl.Resources:
<UserControl.Resources>
<converters:ImageConverter x:Key="imageConverter"/>
</UserControl.Resources>
Help me!!
If you create the URI in code you have to write the full Pack URI including the pack://application:,,,
part. In XAML this is not necessary as it is automatically added by the string-to-ImageSource TypeConverter.
var type = (string)value;
var uri = new Uri("pack://application:,,,/XConsole;component/Images/" + type + ".png");
Note that the above code sample uses a lowercase type
identifier instead of Type
to avoid confusion with the Type
class.
来源:https://stackoverflow.com/questions/14858189/loading-images-source-dynamically-with-ivalueconverter