2010-04-10 198 views
0

我對WPF/XAML相當陌生,目前我正面臨一個問題。帶圖像的WPF自定義控件。

我有一個解決方案,其中包含兩個項目,第一個項目是一個自定義控件庫,裏面有一個自定義的窗體控件。第二個項目是使用我的自定義窗口窗體的WPF應用程序。

除了表單圖標外,所有工作都正常。在WPF應用程序項目我在我的窗口圖標屬性設置爲/ProjectTwoNameSpace;component/Resources/Images/Film.ico,並在WPF自定義控件我試着展現形象,道:

<Image Grid.Column="0" Margin="3" Width="27" Height="27"> 
    <Image.Source> 
     <BitmapImage UriSource="{Binding Path=Icon}" /> 
    </Image.Source> 
</Image> 

但它不工作,我會在運行時錯誤說必須爲我的<Image>標籤設置屬性UriSourceStreamSource

任何人都可以幫到我嗎?我認爲這只是一個WPF新手問題。

回答

1

BitmapImage的屬性不能像顯示的那樣設置,因爲它屬於Uri類型,而您試圖將其設置爲字符串。我會說最簡單的方法來完成你正在做的是將您的Image.Source綁定到圖標,然後將字符串轉換爲位圖圖像對象。假設你的控制是一個窗口,這將是這個樣子

<Window.Resources> 
    <converters:StringToBitmapImageConverter x:Key="stringToBitmapImageConverter" /> 
</Window.Resources> 

... 

<Image Grid.Column="0" Margin="3" Width="27" Height="27" 
    Source="{Binding Path=Icon, Converter={StaticResource stringToBitmapImageConverter}}"> 
</Image> 

然後轉換器看起來像:

class StringToBitmapImageConverter: IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.UriSource = new Uri(value as string); 
     image.EndInit(); 

     return image; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+1

你的解決方案是好的,但你的聲明UriSource「無法通過設置數據綁定「是不真實的。你可以**將UriSource綁定到Uri類型的屬性。你不能做的就是將它綁定到一個沒有轉換器的字符串屬性。 – 2010-04-11 06:48:47

+0

當我試圖粘貼標籤時說,在窗口類型中找不到屬性Resources,我有一個錯誤。我想在哪裏粘貼這個XAML代碼? – Karnalta 2010-04-11 13:32:46

+0

它不適用於我,我沒有得到編譯錯誤,但圖像不存在。圖標屬性設置正確,因爲我可以在任務欄中看到圖標,但不在自定義控件中。也許問題來自於我的圖標屬性設置爲WPF應用程序名稱空間,並且無法在WPF控件庫名稱空間中找到該事實? – Karnalta 2010-04-12 07:00:53