Попробуйте этот бит XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ResourceDictionary>
<Window x:Key="aKey">BlogHeader.jpg</Window>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Image Source="{StaticResource aKey}"/>
</Grid>
</Window>
Он прекрасно компилируется, но при запуске вы получаете исключение XamlParseException:
Невозможно преобразовать значение в атрибуте 'Source' в объект типа 'System.Windows.Media.ImageSource'.
Если вы попытаетесь использовать простой тип вместо Window
, например:
public class SomeType
{
}
Вы получите ошибку во время компиляции:
Тип элемента 'WpfApplication1.SomeClass' не имеет связанного TypeConverter для анализа строки 'BlogHeader.jpg'
Таким образом, ответ лежит в TypeConverter
, предоставленном ImageSource
, который ImageSourceConverter
. Магия происходит в ImageSourceConverter.ConvertFrom
, которая берет строку, создает из нее Uri
и использует BitmapFrame.Create
для создания BitmapFrame
, полученного из ImageSource
.
Обратите внимание, что я использовал Window
в первом примере только для использования типа, который предоставляет преобразователь типа из строки.