WPF Image控件的Source屬性是一個ImageSource對象

1.固定的圖片路徑是能夠的,以下:數據庫

<Image Source="../test.png" />
orm

2.綁定的Path是一個String類型的圖片路徑,而實際狀況它須要的是一個ImageSource,因此只需在前面標記它是一個Path類型的值就OK了!對象

<DataTemplate>
<Image Source="{Binding Path= IconPath}" /> </DataTemplate>繼承

----------------------------------------------------------------------------------------------------------------------------------圖片

不少時候,咱們會使用圖片來裝飾UI,好比做爲控件背景等。內存

而這些圖片能夠分爲兩種形式,即存在於本地文件系統中的圖片和存在於內存中的圖片get

對於這兩種形式的圖片,在WPF中,使用方法不一樣,下面主要說明針對這兩種形式圖片的使用方法it

1、存在於本地文件系統中的圖片文件
對於此類圖片,使用很是簡單,在xaml中直接指定路徑便可,如:
<Button>
<Button.Background>
<ImageBrush ImageSource="bg.jpg"/>
</Button.Background>
</Button>
對應的的C#代碼爲
ImageBrush imageBrush = new ImageBrush();
imageBrush.ImageSource = new BitmapImage(new Uri("bg.jpg", UriKind.Relative));
button.Background = imageBrush;
其中imageBrush.ImageSource的類型爲ImageSource,而ImageSource是個抽象類,
所以咱們不能直接使用它,而是使用它的子類來代替,查閱MSDN,能夠看到它們的繼承關係:
System.Windows.Media.ImageSource
System.Windows.Media.DrawingImage
System.Windows.Media.Imaging.BitmapSourceio

2、存在於內存中的圖片
對於只存在於內存中的圖片,用以上方法就顯得無能爲力了,咱們應該另尋他法,下面介紹一種方法:
先看代碼:class

//此處圖片從文件中讀入用以模擬內存中的圖片
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bg.jpg");
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
ImageBrush imageBrush = new ImageBrush();
ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
button.Background = imageBrush;
其中bitmap便是存在於內存中的Bitmap類型圖片,此處使用直接加載本地圖片文件模擬。
步驟是先將它保存到流中,再使用ImageSourceConverter 類的ConvertFrom方法從流中獲得咱們須要的圖片
OK,本文到此結束,以上方法都是本身在使用中探索所得,若是有更好的方法,本人很是願意和各位交流。

 

---------------------------------------------------------------------------------------------------------------------------------

<StackPanel>
<StackPanel.Resources>
<local:ImageConverter x:Key="cvt_image" />
</StackPanel.Resources>
<TextBox x:Name="txtPath" Text="E:\.....\aaa.jpg" />
<Image Source="{Binding ElementName=txtPath, Path=Text}"/>
<Image Source="{Binding ElementName=txtPath, Path=Text, Converter={StaticResource cvt_image}}" />
</StackPanel>

這裏只是一個示範,實際上是能夠將數據庫中取出來的二進制數據,直接轉換成一個BitmapImage對象返回的:
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new BitmapImage(new Uri(value.ToString()));
}

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

圖片的source是ImageSource類型,而繼承該類型的class有:BitmapImage (繼承自BitmapSource)和DrawingImage(繼承自ImageSource)。BitmapImage能夠顯示一個普通位圖,DrawingImage能夠顯示矢量圖

相關文章
相關標籤/搜索