2010-01-02 135 views
1

我已经创建了一个自定义TaskButton控件,它可以获取图像和文本。该属性设置是这样的:WPF相对路径问题

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

我的自定义控件类实现文本和ImagePath的性质,以及自定义控制的控制模板(在主题\ 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

顺便说一句,我知道我可以通过使用控件模板与ContentPresenter完成相同的事情。项目规格需要使用指定属性的自定义控件。 – 2010-01-02 19:10:14

+0

我出来的想法,你可以显示相关的代码是用你的自定义控件创建用户控件吗? – 2010-01-03 10:41:40

回答

0

我终于弄清楚了这个问题。它实际上是在我的控件的C#支持类中。我将一个ImagePath属性声明为一个字符串,因为这是我要指定图像的方式。糟糕 - 我的电话不好。该属性实际上应该是一个ImageSource属性,而不是一个字符串。 WPF有一个内置的ImageSourceConverter class,它将解析路径并返回指定的图像。所以,我只是将属性名称从ImagePath更改为Image,并将其类型从字符串更改为ImageSource。这解决了问题。

感谢Aviad P.对此采取了一定的措施。没有显示属性声明的C#代码,它是无法解决的。我将在下次发布所有代码和标记。