Я создал собственный элемент управления TaskButton, который принимает изображение и текст. Свойства устанавливаются следующим образом:
<custom:TaskButton Text="Calendar" ImagePath="Images/calendar.png" ... />
Мой класс пользовательского элемента управления реализует свойства Text и ImagePath, а шаблон элемента управления для пользовательского элемента управления (в Themes\Generic.xaml) устанавливает его содержимое следующим образом, используя объект RelativeSource для получения пути к изображению:
<!-- Button Content -->
<StackPanel>
<Image Source="{Binding Path=ImagePath, RelativeSource={RelativeSource TemplatedParent}}" Width="24" Height="24" Stretch="Fill" Margin="10,0,0,0" />
<TextBlock Text="{TemplateBinding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Segoe UI" FontWeight="Bold" Margin="6,0,10,0" Foreground="Black" />
</StackPanel>
В большинстве случаев элемент управления работает нормально, но в конкретном проекте относительный путь к изображению кнопки не определяется правильно, и изображение кнопки не отображается. Вот что я понял до сих пор:
Я правильно ввожу путь, когда использую пользовательский элемент управления. Если я помещаю элемент управления изображением на ту же поверхность дизайна с тем же относительным путем, он разрешается правильно.
Проблема с относительным путем. Если я заменю относительный путь абсолютным путем, путь будет правильно разрешен, и изображение отобразится.
Как я уже упоминал выше, в большинстве случаев управление работает нормально. Единственный случай, когда он не работает, — это проект Prism 2.1, где элемент управления создается в пользовательском элементе управления в модуле Prism. Модуль представляет собой простую библиотеку классов, но в нем есть все ссылки проекта WPF.
Любая идея, почему относительный путь потерпит неудачу? Заранее спасибо за помощь.