2010-01-02 149 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#代碼,它是無法解決的。我將在下次發佈所有代碼和標記。