2010-01-02 21 views
1

Я создал собственный элемент управления TaskButton, который принимает изображение и текст. Свойства задаются следующим образом:Проблема относительного пути WPF

<custom:TaskButton Text="Calendar" ImagePath="Images/calendar.png" ... /> 

Мой пользовательский класс управления реализует текстовые и 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.

Любая идея, почему относительный путь не сработает? Заранее спасибо за вашу помощь.

+0

BTW, я знаю, что я мог бы сделать то же самое, используя шаблон управления с ContentPresenter. Спецификации проекта требуют настраиваемого элемента управления с указанными свойствами. –

+0

У меня нет идей, вы можете показать соответствующий код, который создает пользовательский элемент управления с вашим пользовательским элементом управления? –

ответ

0

Я, наконец, выяснил проблему. Это было фактически в классе поддержки C# для моего контроля. Я объявил свойство ImagePath как строку, так как именно так я собирался указать изображение. К сожалению, плохой вызов с моей стороны. Это свойство должно фактически быть свойством ImageSource, а не строкой. WPF имеет встроенный ImageSourceConverter class, который разрешит путь и вернет указанное изображение. Итак, я просто изменил имя свойства из ImagePath на изображение и изменил его тип из строки в ImageSource. Это решило проблему.

Благодаря Aviad P. за это взломали. Это было неразрешимо без кода C#, отображающего объявления свойств. В следующий раз я опубликую весь код и разметку.

Смежные вопросы