C# 新手错误:WPF应用程序中发生XamlParseException
我正试图使用这个示例构建一个WPF应用程序 . 然而,当我处理它时,我得到了以下错误 “System.Windows.StaticResourceExtension”上的“提供值”引发了异常。“行号“36”和行位置“55” 它被抛出到下面的一行C# 新手错误:WPF应用程序中发生XamlParseException,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我正试图使用这个示例构建一个WPF应用程序 . 然而,当我处理它时,我得到了以下错误 “System.Windows.StaticResourceExtension”上的“提供值”引发了异常。“行号“36”和行位置“55” 它被抛出到下面的一行 <ListBox Name="peopleListBox" Grid.Column="1" Grid.Row="2" ItemsSource="{Binding Source={StaticResource ExpenseDa
<ListBox Name="peopleListBox" Grid.Column="1" Grid.Row="2"
ItemsSource="{Binding Source={StaticResource ExpenseDataSource}, XPath=Person}"
ItemTemplate="{StaticResource nameItemTemplate}">
</ListBox>
内部异常提供以下详细信息
{“找不到名为“nameItemTemplate”的资源。资源名称区分大小写。“}
这里是有问题的xaml
<Page x:Class="ExpenseIt.ExpenseItHome"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="ExpenseIt-Home">
<Grid Margin="10,0,10,10">
<Grid.Background>
<ImageBrush ImageSource="2012-12-20 13.27.57.jpg" />
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="230" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- People list -->
<Label Grid.Column="1" Style="{StaticResource headerTextStyle}" >
View Expense Report
</Label>
<Border Grid.Column="1" Grid.Row="1" Style="{StaticResource listHeaderStyle}">
<Label Style="{StaticResource listHeaderTextStyle}">Names</Label>
</Border>
<ListBox Name="peopleListBox" Grid.Column="1" Grid.Row="2"
ItemsSource="{Binding Source={StaticResource ExpenseDataSource}, XPath=Person}"
ItemTemplate="{StaticResource nameItemTemplate}">
</ListBox>
<!-- View report button -->
<Button Grid.Column="1" Grid.Row="3" Click="Button_Click" Style="{StaticResource buttonStyle}">View</Button>
<Grid.Resources>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
<x:XData>
<Expenses xmlns="">
<Person Name="Mike" Department="Legal">
<Expense ExpenseType="Lunch" ExpenseAmount="50" />
<Expense ExpenseType="Transportation" ExpenseAmount="50" />
</Person>
<Person Name="Lisa" Department="Marketing">
<Expense ExpenseType="Document printing"
ExpenseAmount="50"/>
<Expense ExpenseType="Gift" ExpenseAmount="125" />
</Person>
<Person Name="John" Department="Engineering">
<Expense ExpenseType="Magazine subscription"
ExpenseAmount="50"/>
<Expense ExpenseType="New machine" ExpenseAmount="600" />
<Expense ExpenseType="Software" ExpenseAmount="500" />
</Person>
<Person Name="Mary" Department="Finance">
<Expense ExpenseType="Dinner" ExpenseAmount="100" />
</Person>
</Expenses>
</x:XData>
</XmlDataProvider>
<!-- Name item template -->
<DataTemplate x:Key="nameItemTemplate">
<Label Content="{Binding XPath=@Name}"/>// isnt this enough?
</DataTemplate>
</Grid.Resources>
</Grid>
</Page>
查看费用报告
名字
看法
//这还不够吗?
任何关于我做错了什么以及如何改正的帮助,都将不胜感激!谢谢 此错误表示找不到StaticResource键。使用静态资源时,必须在引用之前在App.Xaml或当前文件中定义它们 因此,请确保示例中的“ExpenseDataSource”和“nameItemTemplate”包含在顶级网格下。参考资料:
<Page ...>
<Grid ...>
<Grid.Resources>
<!-- Name item template -->
<DataTemplate x:Key="nameItemTemplate">
<Label Content="{Binding XPath=@Name}"/>
</DataTemplate>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
...
</Grid.Resources>
<ListBox Name="peopleListBox"
ItemsSource="{Binding Source={StaticResource ExpenseDataSource}, XPath=Person}"
ItemTemplate="{StaticResource nameItemTemplate}">
...
此错误表示找不到StaticResource键。使用静态资源时,必须在引用之前在App.Xaml或当前文件中定义它们
因此,请确保示例中的“ExpenseDataSource”和“nameItemTemplate”包含在顶级网格下。参考资料:
<Page ...>
<Grid ...>
<Grid.Resources>
<!-- Name item template -->
<DataTemplate x:Key="nameItemTemplate">
<Label Content="{Binding XPath=@Name}"/>
</DataTemplate>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
...
</Grid.Resources>
<ListBox Name="peopleListBox"
ItemsSource="{Binding Source={StaticResource ExpenseDataSource}, XPath=Person}"
ItemTemplate="{StaticResource nameItemTemplate}">
...
我用相同的示例代码遇到了相同的问题-上面答案中的术语“在顶级网格下”让我感到困惑,因为在示例中,数据提供者位于顶级网格内,如下所示:
<Page>
<Grid>
<!-- other markup that uses the Resources -->
<Grid.Resources>
<!-- resources stuff as above -->
</Grid.Resources>
</Grid>
</Page>
真正的问题是由XAML代码的自上而下解析引起的……显然是单过程解析器,而不是双过程解析器(用于其他标记)。知道这一点的解决方案是移动网格静态资源(数据提供者),使其物理上位于标记中引用的位置之上。重新排列标记,使其更像下面的内容,并且可以工作…这是一个难题:
<Page>
<Grid>
<Grid.Resources>
<!-- resources stuff as above -->
<!-- Grid.Resources MUST occur ABOVE the other markup that uses resources -->
</Grid.Resources>
<!-- other markup that uses the Resources -->
</Grid>
</Page>
享受吧 我使用相同的示例代码遇到了相同的问题-上面答案中的术语“在顶级网格下”让我感到困惑,因为在示例中,数据提供者位于顶级网格内,如下所示:
<Page>
<Grid>
<!-- other markup that uses the Resources -->
<Grid.Resources>
<!-- resources stuff as above -->
</Grid.Resources>
</Grid>
</Page>
真正的问题是由XAML代码的自上而下解析引起的……显然是单过程解析器,而不是双过程解析器(用于其他标记)。知道这一点的解决方案是移动网格静态资源(数据提供者),使其物理上位于标记中引用的位置之上。重新排列标记,使其更像下面的内容,并且可以工作…这是一个难题:
<Page>
<Grid>
<Grid.Resources>
<!-- resources stuff as above -->
<!-- Grid.Resources MUST occur ABOVE the other markup that uses resources -->
</Grid.Resources>
<!-- other markup that uses the Resources -->
</Grid>
</Page>
享受吧 检查异常的“InnerException”-它应该为您提供有关问题的更多详细信息。什么是
ExpenseDataSource
?您在哪里以及如何定义它?我在问题中添加了更多细节。@Omribitan,我在xaml中提供了细节。谢谢检查异常的“InnerException”-它应该为您提供有关问题的更多详细信息。什么是ExpenseDataSource
?您在哪里以及如何定义它?我在问题中添加了更多细节。@Omribitan,我在xaml中提供了细节。谢谢内部异常是{“找不到名为'nameitemplate'的资源。资源名称区分大小写。”}
。这有区别吗?这有什么不同吗?@KodeSeeker是的——问题是你把资源放得太低了。将它们向上移动到顶级网格,它应该可以工作。内部异常是{“找不到名为'nameitemplate'的资源。资源名称区分大小写。”}
。这有区别吗?这有什么不同吗?@KodeSeeker是的——问题是你把资源放得太低了。将它们向上移动到顶级网格,它应该可以工作。