编辑: 我创建了一个更容易概念的证明:
我有一个带有以下MainWindow.xaml的WPF应用程序:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Image Source="pack://application:,,,/IconContainer;component/Icons/Blocked.png"/>
</Grid>
在我的测试解决方案中,我只有两个项目:一个是上面的WPF应用程序,另一个是带有名为Icons的文件夹的类.dll,其中有一个名为Blocked.png的文件。 WPF应用程序引用类库。
网格中没有显示任何内容。
结束编辑
在我的解决方案中,我有一个带有ListView的WPF应用程序,它在其中一列中显示一个图标。起初我在WPF应用程序中直接使用ResourceDictionary引用了这些图标,一切都很顺利。现在我正在尝试将图标移动到类库中,一切都在崩溃。
App.xaml:
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:WPFBase;assembly=WPFBase"
xmlns:local="clr-namespace:DataEditor"
xmlns:styles="clr-namespace:Styles;assembly=Styles"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles;component/Styles/BridgeItStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<styles:IconConverter x:Key="IconConverter"/>
</ResourceDictionary>
</Application.Resources>
MainWindow.xaml:
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding IconName,
Converter={StaticResource IconConverter},ConverterParameter=S}"
/>
</DataTemplate>
</GridViewColumn.CellTemplate>
Styles类库包含一个包含应用程序样式的ResourceDictionary,但它还包含一个转换器,用于构造应检索的图标的文件名。此转换器使用自己的ResourceDictionary,其中包含对图标的引用。
指定图标的ResourceDictionary:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<BitmapImage x:Key="ErrorL" UriSource="errorL.png"/>
<BitmapImage x:Key="InfoL" UriSource="infoL.png"/>
<BitmapImage x:Key="QuestionL" UriSource="questionL.png"/>
<BitmapImage x:Key="SuccessL" UriSource="successL.png"/>
<BitmapImage x:Key="WarnL" UriSource="warnL.png"/>
<BitmapImage x:Key="ErrorS" UriSource="errorS.png"/>
<BitmapImage x:Key="ErrorXS" UriSource="errorXS.png"/>
<BitmapImage x:Key="InfoS" UriSource="infoS.png"/>
<BitmapImage x:Key="QuestionS" UriSource="questionS.png"/>
<BitmapImage x:Key="SuccessS" UriSource="successS.png"/>
<BitmapImage x:Key="WarnS" UriSource="warnS.png"/>
</ResourceDictionary>
转换器,也在Styles类库中:
Public Class IconConverter
Implements IValueConverter
Private _iconDictionary As ResourceDictionary
Public Sub New()
_iconDictionary = New ResourceDictionary()
_iconDictionary.Source = New Uri("/Styles;component/MessageIcons/MessageIcons.xaml", UriKind.Relative)
End Sub
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim iconName = CStr(value)
Dim sizeParameter = CStr(parameter)
Dim icon As BitmapImage
Select Case iconName
Case ProgressReport(Of Object).IconError
Return _iconDictionary(ProgressReport(Of Object).IconError & sizeParameter)
Case ProgressReport(Of Object).IconInfo
icon = _iconDictionary(ProgressReport(Of Object).IconInfo & sizeParameter)
Case ProgressReport(Of Object).IconSuccess
Return _iconDictionary(ProgressReport(Of Object).IconSuccess & sizeParameter)
Case ProgressReport(Of Object).IconWarn
Return _iconDictionary(ProgressReport(Of Object).IconWarn & sizeParameter)
Case Else
Return Binding.DoNothing
End Select
Return icon
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Binding.DoNothing
End Function
End Class
当我在转换器中设置断点时,我可以看到构造了正确的URI并且图标变量不为空。
尽管如此,在用户界面中没有显示任何内容,并且Visual Studio的立即窗口中没有显示绑定或其他错误。
我哪里错了?
答案 0 :(得分:1)
估计同事(g.u.y.s.没有通过SO的亵渎过滤器:-)),请注意这一点,以免你像我一样失去数小时毫无意义的调试: 将图标的构建操作设置为 RESOURCE
我们有它......
答案 1 :(得分:0)
你错过了属性x:Shared=False
<BitmapImage x:Key="ErrorL" x:Shared="False" UriSource="errorL.png"/>
希望它能解决你的问题。