編輯: 我創建了一個概念證明是非常非常簡單:圖標在主應用程序窗口不顯示
我有以下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與一個在其名爲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>
的樣式類庫包含包含應用程序樣式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>
轉換器,也是在樣式類庫:
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的「立即」窗口中未顯示任何綁定或其他錯誤。
我哪裏錯了?
你在類庫或主應用程序中有圖標? – Nitin
在類庫中,這是關鍵:-) – Dabblernl
rt ..你可以嘗試更新UriSource的uri值,如pack:// application:,,,/ReferencedAssembly; component/icon.png – Nitin