设置背景URI图像不工作
根据用户在窗口内的哪个导航页面,我有两个窗口的背景图像。图像位于我的项目文件夹内的位置:设置背景URI图像不工作
<NavigationWindow.Background>
<ImageBrush ImageSource="/Blah.MyApp;component/Resources/Images/MyImage1.jpg" />
</NavigationWindow.Background>
这正确显示图像:
/Resources/Images/MyImage1.jpg
如果我用IDE来选择一个固定的背景图片,然后将XAML文件与更新。
然而,正如我希望的图像切换,我创建了一个视图模型为如下暴露一个URI属性窗口(其中实现INotifyPropertyChanged):
private readonly string _image1 = "pack://application:,,,/Resources/Images/MyImage1.jpg";
private readonly string _image2 = "pack://application:,,,/Resources/Images/MyImage2.jpg";
public MainNavWindowViewModel()
{
SetImage1();
}
private Uri _backgroundImg;
public Uri BackgroundImg
{
get
{
return _backgroundImg;
}
private set
{
_backgroundImg = value;
OnPropertyChanged("BackgroundImg");
}
}
public void SetImage1()
{
BackgroundImg = new Uri(_image1);
}
public void SetImage2()
{
BackgroundImg = new Uri(_image2);
}
在主窗口中的XAML文件,我已将NavigationWindow.Background替换为:
<NavigationWindow.Background>
<ImageBrush ImageSource="{Binding Path=BackgroundImg, Mode=OneWay}" />
</NavigationWindow.Background>
并将Windows'DataContext设置为ViewModel。
但是,这个功能只是在我的窗口上显示一个黑色的背景(当我注释掉数据绑定ViewModel到窗口的那一行时,这是相同的行为)。
我将ViewModel设置为窗口构造函数的第一行中的Datacontext。如果我在它上面放置一个断点,它会执行这些行并且看起来没问题。
任何想法正在发生什么,或者我怎么能找出它出错的地方?
TIA
没关系,我想通了什么事情错了。图像资源的构建操作已设置为嵌入式资源,但应将其设置为资源。不幸的是,只做一个构建并不总是应用更改,因此需要重建或清理+构建。
您使用的是.NET 3.5吗? 有一个错误,但你可以使用一个转换器,达到同样的效果:
Public Class BitmapImageToImageConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Dim bitmapImage = TryCast(value, BitmapImage)
Dim height As Double = 0
Dim returnImage As New Image()
If bitmapImage IsNot Nothing Then
returnImage.Height = 15
If parameter IsNot Nothing AndAlso Double.TryParse(parameter.ToString, height) Then
returnImage.Height = height
End If
returnImage.Source = bitmapImage
Else
' Set a default image if none is given
Dim uriString = "pack://application:,,,/Resources/Images/nopicture.png"
Dim img As New BitmapImage()
img.BeginInit()
img.UriSource = New Uri(uriString)
img.EndInit()
returnImage.Source = img
End If
Return returnImage
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
使用:
<Window.Resources>
<local:BitmapImageToImageConverter x:Key="imageConverter" />
</Window.Resources>
<ImageBrush ImageSource="{Binding Image, Converter={StaticResource imageConverter}}" />
图像然后System.Windows.Media.Imaging.BitmapImage的在你的财产视图模型..加载它,我有以下方法(这在加载/资源文件夹中的嵌入式图像:
Protected Sub LoadBitmapImageFromResource(ByVal fileName As String)
Dim assName = Assembly.GetCallingAssembly().GetName().Name
Dim uriString = "pack://application:,,,/" + assName + ";component/Resources/" + fileName
Dim img As New BitmapImage()
img.BeginInit()
img.UriSource = New Uri(uriString)
img.EndInit()
Image = img
End Sub
标准高度设置为15个像素(在我的实现我使用我的转换器的菜单项,所以他们真的很小;)),但你可以给一个整数值作为ConverterParameter设置图像的高度。
PS:对不起,VB.NET,但它是我的客户的要求VB.NET中,而不是在C#写了这...
感谢您的回复。现在不再是问题,但我使用.Net 4。 – millie 2012-05-17 15:40:44