2010-03-08 124 views
3

我有一個簡單的XAML頁面,它在Visual Studio中的任何應用程序的一部分加載時加載正常。然而,當我部署使用ClickOnce這個應用程序,我得到以下異常:XAML解析異常

Type : System.Windows.Markup.XamlParseException, PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
    Message : Unable to cast object of type 'System.Windows.Controls.Grid' to type 'EMS.Controls.Dictionary.StatusBarControl'. Error at object 'System.Windows.Controls.Grid' in markup file 'EMS.Controls.Dictionary;component/views/statusbarcontrol.xaml'. 
Source : PresentationFramework 
Help link : 
LineNumber : 0 
LinePosition : 0 
KeyContext : 
UidContext : 
NameContext : 
BaseUri : pack://application:,,,/EMS.Controls.Dictionary;component/views/statusbarcontrol.xaml 
Data : System.Collections.ListDictionaryInternal 
TargetSite : Void ThrowException(System.String, System.Exception, Int32, Int32, System.Uri, System.Windows.Markup.XamlObjectIds, System.Windows.Markup.XamlObjectIds, System.Type) 
Stack Trace : at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType) 
    at System.Windows.Markup.XamlParseException.ThrowException(ParserContext parserContext, Int32 lineNumber, Int32 linePosition, String message, Exception innerException) 
    at System.Windows.Markup.BamlRecordReader.ReadRecord(BamlRecord bamlRecord) 
    at System.Windows.Markup.BamlRecordReader.Read(Boolean singleRecord) 
    at System.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment() 
    at System.Windows.Markup.TreeBuilder.Parse() 
    at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) 
    at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 
    at EMS.Controls.Dictionary.StatusBarControl.InitializeComponent() 
    at EMS.Controls.Dictionary.StatusBarControl..ctor(IDataView content) 
    at OCC600.ReportManager.ReportPresenter.ShowQueryView(Object arg, Boolean bringForward, Type selectedDataType) 
    at OCC600.ReportManager.ReportPresenter..ctor(IUnityContainer container) 
    at OCC600.ReportManager.Module.Initialize() 
    at Microsoft.Practices.Composite.Modularity.ModuleLoader.Initialize(ModuleInfo[] moduleInfos) 

    Inner Exception 
    --------------- 
    Type : System.InvalidCastException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
    Message : Unable to cast object of type 'System.Windows.Controls.Grid' to type 'EMS.Controls.Dictionary.StatusBarControl'. 
    Source : EMS.Controls.Dictionary 
    Help link : 
    Data : System.Collections.ListDictionaryInternal 
    TargetSite : Void System.Windows.Markup.IComponentConnector.Connect(Int32, System.Object) 
    Stack Trace : at EMS.Controls.Dictionary.StatusBarControl.System.Windows.Markup.IComponentConnector.Connect(Int32 connectionId, Object target) 
     at System.Windows.Markup.BamlRecordReader.ReadConnectionId(BamlConnectionIdRecord bamlConnectionIdRecord) 
     at System.Windows.Markup.BamlRecordReader.ReadRecord(BamlRecord bamlRecord) 

的XAML頁面如下:

<cdic:ResultSetControl 
    x:Class="EMS.Controls.Dictionary.StatusBarControl" 
    xmlns:dc="clr-namespace:DevComponents.WpfRibbon;assembly=DevComponents.WpfRibbon" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
    xmlns:cdic="clr-namespace:EMS.Controls.Dictionary.Primitives" 
    xmlns:dicutil="clr-namespace:OCC600.Infrastructure.Dictionary.Utility;assembly=EMS.Infrastructure.Dictionary" 
    Loaded="ResultSetControl_Loaded"> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../Resources/Styles.xaml"/>     
      </ResourceDictionary.MergedDictionaries> 
      <BooleanToVisibilityConverter x:Key="BooToVisConv"/> 
     </ResourceDictionary> 
    </UserControl.Resources> 
    <Grid Name="panel" > 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="21"/> 
     </Grid.RowDefinitions>   
     <StatusBar Name="statusBar" Grid.Row="1"> 
      <StatusBar.ItemsPanel> 
       <ItemsPanelTemplate> 
        <DockPanel LastChildFill="False"/> 
       </ItemsPanelTemplate> 
      </StatusBar.ItemsPanel> 

      <StatusBarItem Margin="10,0, 10, 0">     
       <TextBlock Text="{Binding CountText}" Padding="5,0"/>     
      </StatusBarItem>      

      <StatusBarItem Margin="10,0"> 
       <TextBlock Text="{Binding MemoryUsageText}" Padding="5,0"/> 
      </StatusBarItem> 

      <StatusBarItem Margin="10,0" MaxWidth="400"> 
       <TextBlock Text="{Binding StatusReport.Summary}" Padding="5,0" /> 
      </StatusBarItem> 

      <ProgressBar Margin="20,0" Name="progBar" Width="150" Height="13" Visibility="Collapsed" >     
       <ProgressBar.ContextMenu>     
        <ContextMenu Name="ctxMenu" ItemsSource="{Binding ActiveWorkItems}" 
           Visibility="{Binding Path=ActiveWorkItems.HasItems, Converter={StaticResource BooToVisConv}}">       
         <ContextMenu.ItemContainerStyle> 
          <Style TargetType="{x:Type MenuItem}">         
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="{x:Type MenuItem}"> 
              <StackPanel Height="20" Margin="10,0" Orientation="Horizontal" HorizontalAlignment="Left"> 
               <TextBlock Text="{Binding Path=Name, Mode=OneTime}" 
                  Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Left" /> 
               <ToggleButton Style="{StaticResource vistaGoldenToggleButtonStyle}" 
                 Padding="5,0" Content="Cancel" IsChecked="{Binding Cancel}"               
                 Margin="10,0,0,0" >              
               </ToggleButton> 
              </StackPanel>                      
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </ContextMenu.ItemContainerStyle>             
        </ContextMenu> 
       </ProgressBar.ContextMenu> 
      </ProgressBar> 

      <StatusBarItem Margin="10,0" MaxWidth="400" HorizontalAlignment="Right"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="Last Update:" Padding="5,0" /> 
        <TextBlock Text="{Binding TimeStamp}" Padding="5,0" />      
       </StackPanel>     
      </StatusBarItem> 


      <!-- TODO: Put checkmark if all is well, or error if connection failed--> 
      <StatusBarItem Style="{DynamicResource {ComponentResourceKey 
       TypeInTargetAssembly=dc:Ribbon, ResourceId=StatusBarItemAlt}}" 
          DockPanel.Dock="Right" Padding="6,0,32,0" >  

        <cdic:SplitButton Margin="5,0" Padding="5,2"        
          Style="{DynamicResource {ComponentResourceKey 
         TypeInTargetAssembly={x:Type cdic:SplitButtonResources}, ResourceId=vistaSplitButtonStyle}}" 
             Mode="Split"> 
         <cdic:SplitButton.ContextMenu> 
          <ContextMenu > 
           <MenuItem Header="Refresh Now" Command="{Binding ToggleConnectivityCmd}" 
              CommandParameter="false"/> 
           <MenuItem IsCheckable="True" 
              IsChecked="{Binding ConnectState, Converter={StaticResource isFailedConverter}}" 
              CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}, 
            Path=IsChecked}" 
              Header="Work Offline" Command="{Binding ToggleConnectivityCmd}"/> 
         </ContextMenu>        
         </cdic:SplitButton.ContextMenu> 
        <cdic:SplitButton.Content> 
         <StackPanel Orientation="Horizontal"> 
          <Image        
           x:Name="img"  
           Source="{Binding ConnectState, Converter={StaticResource imageConverter}}" 
           Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
          <TextBlock Text="{Binding ConnectState}" Padding="3,0,0,0"/>        
         </StackPanel>       
        </cdic:SplitButton.Content> 
       </cdic:SplitButton>           
      </StatusBarItem>    

     </StatusBar> 
    </Grid>  
</cdic:ResultSetControl> 

錯誤只是似乎已走出沒有在那裏。有任何想法嗎?

TIA。

+0

我遇到了幾乎完全相同的問題。那裏的任何人都有解決方案? – Russ 2010-10-29 14:25:13

+0

你可以發佈「EMS.Controls.Dictionary.StatusBarControl」類的代碼隱藏嗎? – 2010-10-29 15:05:17

回答

0

我的猜測是參考「EMS.Controls.Dictionary.StatusBarControl」控件是應該安裝在用戶GAC中的庫的一部分。確保你不缺少應用程序的先決條件。