Wpf Silverlight错误:AG_E_未知错误

Wpf Silverlight错误:AG_E_未知错误,wpf,silverlight,Wpf,Silverlight,运行Silverlight项目时,我遇到了一个AG_E_UNKNOWN_错误。该项目是从WPF移植而来的,从我在web上收集到的信息来看,我认为它与我的XAML中无效的东西有关 编辑C#控制源可在此处找到: 下面是Generic.xaml,我的应用程序的样式 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas

运行Silverlight项目时,我遇到了一个
AG_E_UNKNOWN_错误
。该项目是从WPF移植而来的,从我在web上收集到的信息来看,我认为它与我的XAML中无效的东西有关

编辑C#控制源可在此处找到:

下面是Generic.xaml,我的应用程序的样式

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:SilverlightCalendar.Controls">

    <Style TargetType="{c:CalendarTimeslotItem}">
        <Setter Property="Content" Value="{Binding}" />
        <Setter Property="Background" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:CalendarTimeslotItem}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="#A5BFE1"
                            BorderThickness="0,0.5,0,0.5"
                            x:Name="bd"
                            Height="22">
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{c:CalendarLedgerItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:CalendarLedgerItem}">
                    <Border Background="#E3EFFF"
                            BorderBrush="#6593CF"
                            BorderThickness="0,0,1,1"
                            Height="44" Width="50">
                        <StackPanel Orientation="Horizontal" 
                                    VerticalAlignment="Center" 
                                    HorizontalAlignment="Center">
                            <TextBlock Text="{TemplateBinding TimeslotA}" 
                                       Foreground="#9493CF" FontSize="16" Margin="0,3,0,0"/>
                            <TextBlock Text="{TemplateBinding TimeslotB}" 
                                       Foreground="#9493CF"  Margin="1.5,0,0,0"/>
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{c:CalendarDay}">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <c:TimeslotPanel />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:CalendarDay}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <StackPanel x:Name="PART_CalendarTimeslots" />
                            <ItemsPresenter />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{c:CalendarLedger}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:CalendarLedger}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <StackPanel x:Name="PART_CalendarLedgerItems" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{c:Calendar}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:Calendar}">
                    <Border Background="#E3EFFF"
                            BorderBrush="#6593CF"
                            BorderThickness="2,2,2,2">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>
                            <Border BorderBrush="#6593CF" BorderThickness="0,0,0,1" 
                                    Grid.Column="0" Grid.Row="1" />
                            <Border BorderBrush="#6593CF" BorderThickness="0,0,0,1" 
                                    Grid.Column="1" Grid.Row="1" />
                            <ScrollViewer Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="50" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>

                                    <c:CalendarLedger Grid.Column="0" />
                                    <c:CalendarDay Grid.Column="1" x:Name="PART_CalendarDay" />
                                </Grid>
                            </ScrollViewer>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{c:CalendarAppointmentItem}">
        <Setter Property="StartTime" Value="{Binding StartTime}" />
        <Setter Property="EndTime" Value="{Binding EndTime}" />
        <Setter Property="Width" Value="{Binding ActualWidth, ElementName=CalendarTimeslots}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{c:CalendarAppointmentItem}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="300" />
                            <ColumnDefinition Width="300" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Border Grid.Row="0" 
                                Grid.Column="{Binding Column}" 
                                Grid.ColumnSpan="{Binding ColumnSpan}"
                                CornerRadius="4,4,4,4" 
                                BorderThickness="1,1,1,1" 
                                BorderBrush="#5D8CC9" 
                                Background="{Binding Background}"
                                Margin="1,1,5,1" 
                                Padding="5,5,5,5">
                            <Border.Effect>
                                <DropShadowEffect Opacity="0.5" />
                            </Border.Effect>
                            <TextBlock 
                                IsHitTestVisible="False"
                                Foreground="{Binding Foreground}"
                                VerticalAlignment="Top"
                                MaxHeight="20"
                                LineHeight="20"
                                FontFamily="Segoe UI" 
                                FontSize="12.75" 
                                FontWeight="DemiBold"
                                FontStretch="Medium"
                                TextWrapping="WrapWithOverflow"
                                Text="{Binding Subject}" />                            
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>


如果仔细查看,该错误通常有一个与XAML中的行相关的行号。

最近调试了一系列这些错误。当我看不到问题时,我只注释XAML的一大块,直到我没有得到错误,然后取消注释部分,直到找到导致异常的地方


编辑:对于初学者来说,去掉
TargetType=“{c:CalendarTimeslotItem}”
中的花括号。刚试过,我就这样得到了例外。只需使用
TargetType=“c:CalendarTimeslotItem”

将系统配置为在引发异常时中断

  • 在Visual Studio中选择调试菜单,然后选择异常…

  • 异常对话框中,标记公共语言运行时异常旁边的抛出复选框

  • 在调试器中启动项目(确保已启用Silverlight调试)

  • 您很可能会看到一些不相关的异常被抛出(只需继续调试),但在某一点上您应该会看到有问题的XAML异常。检查异常,看看您是否能找出行号。如果在代码隐藏文件中抛出异常,您可以从代码隐藏文件推断XAML文件。

    问题已解决(以及其他问题,但这是另一天的问题)

    在我的例子中,在模板中使用其他有界属性导致了这个问题

        <Style TargetType="c:CalendarTimeslotItem">
        <!--<Setter Property="Content" Value="{Binding}" />-->
        <Setter Property="Template">
    
    
    

    
    
    我也被这个错误弄糊涂了,但是关于注释出部分并执行它以缩小范围的技巧帮助很大。我最终发现我的一个控件绑定不好。因此,如果您遇到了这个问题,请在继续之前确保您的XAML是完美的。

    我们刚刚遇到了相同的错误,原因是它是为x86而不是任何CPU构建的。显然,这并不是每种情况都会发生,但希望它能有所帮助,因为它肯定是我们的。

    如果您调试此应用程序。它是否显示发生错误的行号?不要查看HTML输出。这通常不是很有帮助。很好的调试提示,艾伦。您甚至可以在此处应用二进制搜索:)。您可以轻松确定问题是否存在于XAML中(我猜是这样):只需对XAML中的所有内容进行注释,然后查看是否得到一些“正常”异常而不是AG_E_UNKNOWN_错误。XamlException仍然是AG_E_UNKNOWN_错误。确切地说:XamlParseException:AG_E_UNKNOWN_错误[行:12位置:53]行号是我的用户控件的入口点,用户控件是用C#编写的,样式是XAML。唉,如前所述,这是完全无用的信息--你必须查看相应XAML文件中的第12行位置53,以查看是什么导致了问题。我看不出这怎么是无用的信息?因为代码是,这是一个入口点。用于创建子控件的每一段可能的代码,即大约1000行代码,都可能导致此问题。这基本上等于调试器说您的代码错误在Main()中.Happy猜测;-)这正是我的答案试图解决的问题。我的说明是尝试捕获在读取某些深度嵌套的XAML时首先捕获的异常,而不是在顶层窗口加载失败时捕获的更高级别异常。至少这是我解决XAM的策略
        <Style TargetType="c:CalendarAppointmentItem">
        <!--<Setter Property="StartTime" Value="{Binding StartTime}" />-->
        <!--<Setter Property="EndTime" Value="{Binding EndTime}" />-->
        <Setter Property="Template">