Estoy aprendiendo WPF y comencé con this MSDN tutorial.Error - No se puede encontrar recurso estático en una aplicación WPF
Estaba siguiendo el tutorial. Cuando terminé el código de acuerdo con el tutorial y trato de correr consigo una excepción en una página XAML que dice
'proporcionan un valor de 'System.Windows.StaticResourceExtension' produjo una excepción.' El número de línea '27' y la posición de línea '55'. ". Y la excepción interna revela que el error es" No se puede encontrar el recurso llamado 'personItemTemplate'. nombres de recursos entre mayúsculas y minúsculas. ".
El XAML culpable es abajo.
<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="321" d:DesignWidth="532"
Title="ExpenseIt - Home">
<Grid Margin="10,0,10,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="230" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Column="1" Style="{StaticResource headerTextStyle}">View Expense Report</Label>
<!-- Resource List Label-->
<Border Grid.Column="1" Grid.Row="1" Style="{StaticResource listHeaderStyle}">
<Label VerticalAlignment="Center" Foreground="White" FontWeight="Bold">Names</Label>
</Border>
<!-- Resource List-->
<ListBox Name="peopleListBox" Grid.Column="1" Grid.Row="2"
ItemsSource="{Binding Source={StaticResource ExpenseDataSource}, XPath=Person}"
ItemTemplate="{StaticResource personItemTemplate}">
</ListBox>
<!-- View button -->
<Button Grid.Column="1" Grid.Row="3" Click="Button_Click" Style="{StaticResource buttonStyle}">View</Button>
<!-- Set Background Image-->
<Grid.Background>
<ImageBrush ImageSource="watermark.png" />
</Grid.Background>
<Grid.Resources>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
<x:XData>
<Expenses xmlns="">
<Person Name="TommyVance" Department="Legal">
<Expense ExpenseType="Lunch" ExpenseAmount="50" />
<Expense ExpenseType="Transportation" ExpenseAmount="50" />
</Person>
<Person Name="PhilJackson" Department="Marketing">
<Expense ExpenseType="Document printing"
ExpenseAmount="50"/>
<Expense ExpenseType="Gift" ExpenseAmount="125" />
</Person>
<Person Name="PaulBriggs" Department="Engineering">
<Expense ExpenseType="Magazine subscription"
ExpenseAmount="50"/>
<Expense ExpenseType="New machine" ExpenseAmount="600" />
<Expense ExpenseType="Software" ExpenseAmount="500" />
</Person>
<Person Name="AlfredNobel" Department="Finance">
<Expense ExpenseType="Dinner" ExpenseAmount="100" />
</Person>
</Expenses>
</x:XData>
</XmlDataProvider>
<!-- Data Template to mention that Name should be fetched from the XMLDataProvider -->
<!-- Name item template -->
<DataTemplate x:Key="personItemTemplate">
<Label Content="{Binding [email protected]}"/>
</DataTemplate>
</Grid.Resources>
</Grid>
</Page>
Tengo la plantilla requerida dentro de los recursos Grid y así agregarlo como un recurso estático. Aún así, se lanza la excepción que el datatemplate no está disponible.
Sí, lo intenté al azar y vine aquí para actualizar la respuesta. Pero tú primero. :-) Estoy aceptando tu respuesta. ¿Alguna razón por la cual la referencia del recurso se comporta así? – blntechie
Bueno, no estoy seguro. Parecería a primera vista que analiza el XAML en orden secuencial, por lo que no sabe qué es 'personItemTemplate' cuando se hace referencia por primera vez. Sin embargo, sí sabe qué es su 'ExpenseDataSource' a pesar de dónde se coloca. Entonces ... tendré que ceder ante alguien con más experiencia para una mejor explicación. :) –
Gracias. Odio WPF por esto :-D –