2013-09-22 94 views
0

編輯: 我創建了一個概念證明是非常非常簡單:圖標在主應用程序窗口不顯示

我有以下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的「立即」窗口中未顯示任何綁定或其他錯誤。

我哪裏錯了?

+0

你在類庫或主應用程序中有圖標? – Nitin

+0

在類庫中,這是關鍵:-) – Dabblernl

+0

rt ..你可以嘗試更新UriSource的uri值,如pack:// application:,,,/ReferencedAssembly; component/icon.png – Nitin

回答

1

估計的同事(球員沒有通過SO的髒話過濾:-)),利用這個要謹慎,免得你將失去無謂調試的時間跟我一樣: 設置圖標的生成操作資源

我們有...

+0

測試你是否真的不能說「傢伙」。 –

+0

WFM(padpadpadpadpad) –

0

ür短缺屬性x:Shared=False

<BitmapImage x:Key="ErrorL" x:Shared="False" UriSource="errorL.png"/> 

希望這應該解決您的問題。