编辑:我创建了一个更容易的概念证明:
我有一个带有以下 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 应用程序,另一个只是一个类 .dll,其中包含一个名为 Icons 的文件夹,其中包含一个名为 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,并且 icon 变量不为空。
尽管如此,用户界面中没有显示任何内容,并且 Visual Studio 的“立即”窗口中没有显示任何绑定或其他错误。
我哪里错了?