При использовании Image.UriSource
вам необходимо указать относительный путь к файлам с вашими изображениями, если изображения были добавлены в ваш проект, а их «Build Action» было установлено на «Resource». Например. если вы поместили ваши изображения в папку проекта в Visual Studio, которая называется «images», вы можете ссылаться на изображения следующим образом:
img.UriSource = new Uri("/Images/StructureImage.png", UriKind.Relative);
Если изображения не собраны как ресурс, вы должны использовать полный путь к файлу, т.е.
img.UriSource = new Uri("http://server/Images/StructureImage.png", UriKind.Absolute);
EDIT:
Если вы поместите ваши изображения в ресурс Ресурса приложения, вы всегда можете получить к нему доступ следующим образом:
Application.Current.Resources["StructureImage"];
Если вы разместите ресурсы в другом месте, вы можете использовать IMultiValueConverter
вместо IValueConverter
для конвертера. Тогда ваш преобразователь типов будет выглядеть примерно так:
class TestValueConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Validation of parameters goes here...
var type = (Action) values[0];
var image1 = values[1];
var image2 = values[2];
if (type.ActionType == ActionType.Security)
{
return image1;
}
else
{
return image2;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
и ваш XAML будет выглядеть примерно так:
<Image>
<Image.Source>
<MultiBinding Converter="{StaticResource testValueConverter}">
<Binding Path="Action" />
<Binding Source="{StaticResource SecurityImage}" />
<Binding Source="{StaticResource StructureImage}" />
</MultiBinding>
</Image.Source>
</Image>
Наконец, вот как бы вы определили свои ресурсы:
<imaging:BitmapImage x:Key="StructureImage" UriSource="StructureImage.png" />
<imaging:BitmapImage x:Key="SecurityImage" UriSource="SecurityImage.png" />
<local:TestValueConverter x:Key="testValueConverter" />
Приведенный выше код не проверен!