Разница в том, что в первом случае (когда вы жестко закодируете путь) синтаксический анализатор XAML вызовет преобразователь значения (ImageSourceConverter
) для строки, указанной вами в атрибуте Source
, чтобы преобразовать ее в значение типа ImageSource
.В то время как во втором случае ожидается, что значение вашей константы уже будет иметь тип ImageSource
.
Что вы можете сделать, так это то, что вы можете поместить все пути в глобальный ResourceDictionary
:
<Window.Resources>
<ResourceDictionary>
<BitmapImage x:Key="IconName">/Project;component/Icons/IconName.png</BitmapImage>
</ResourceDictionary>
</Window.Resources>
<Image Source="{StaticResource IconName}" Width="16" Height="16" />
Если вы хотите сохранить константы пути в коде, вы можете иметь Uri
объекты как константы и установить свойство UriSource
BitmapImage
для этого URI:
public static readonly Uri IconName = new Uri("/Project;component/Icons/IconName.png", UriKind.Relative);
<BitmapImage x:Key="IconName" UriSource="{x:Static pb:IconConstants.IconName}"/>