Erreur, Impossible de trouver de la ressource statique dans une application WPF
Je suis en train d'apprendre WPF et a commencé avec cette MSDN tutoriel.
J'étais juste en suivant le tutoriel. Quand j'ai fini le code pour le tuto et essayer de courir, j'obtiens une exception dans une page XAML qui dit
'Apporter de la valeur sur "Système".De Windows.StaticResourceExtension' a déclenché une exception.' Numéro de ligne '27' et la position de la ligne '55'." . Et d'exception interne révèle que l'erreur est "Impossible de trouver de la ressource nommée "personItemTemplate'. Les noms de ressources sont sensibles à la casse.".
Le coupable XAML est ci-dessous.
<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 XPath=@Name}"/>
</DataTemplate>
</Grid.Resources>
</Grid>
</Page>
J'ai le modèle requis à l'intérieur de la Grille de ressources et donc de l'ajouter comme une ressource statique. Pourtant, il lève l'exception que le datatemplate n'est pas disponible.
OriginalL'auteur blntechie | 2010-05-26
Vous devez vous connecter pour publier un commentaire.
Déplacer le
<Grid.Resources> ... </Grid.Resources>
vers le haut de votre définition de la grille et il va fonctionner. Le DataTemplate semble devoir être défini avant d'être référencé. J'ai copié votre échantillon dans une application et a confirmé que le déplacement de la section des Ressources jusqu'a résolu le problème.Eh bien, je ne sais pas pour sûr. Il semblerait en un coup d'œil qu'il analyse le code XAML dans l'ordre séquentiel, et si elle ne sait pas ce que "personItemTemplate", c'est quand il est référencé pour la première fois. Cependant, il ne sais quoi votre "ExpenseDataSource" est malgré où il est placé. Alors... je vais devoir en remettre à quelqu'un avec plus d'expertise pour une meilleure explication. 🙂
Merci.J'ai juste la haine de WPF pour cela 😀
Si vous voulez une expérience plus dynamique, l'utilisation DynamicResource. StaticResource, sont les ressources plus rapidement et de prévenir cyclique de référence. Il n'est pas vraiment aussi simple que cela, mais pensez à StaticResource, comme au moment de la compilation de recherche, et DynamicResource au moment de l'exécution de la réflexion de recherche. DynamicResource est "mieux", mais vous payez pour la flexibilité au moment de l'exécution. Préférez StaticResource quand il va travailler.
OriginalL'auteur Ben Collier
Il y a plusieurs raisons pour cette erreur. La solution à mon proplem est que je n'ai pas réussi à ajouter un "InitializeComponent();" dans le constructeur de la Demande, par conséquent, le code Xaml contenant ResourceDictionary a jamais été initialisé. Par conséquent l'erreur "ne Peut pas trouver..." j'ai oublié de mentionner que je suis à la main-codage. Si vous la génération de code via Visual Studio, ce n'est pas nécessaire.
OriginalL'auteur Ananize Scott
J'ai eu la même erreur, mais aucune des réponses ci-dessus a travaillé.
Mon erreur s'est résolu en changeant le code XAML sur le datatemplate à partir de :
à
Changer de sorte que le paramètre de Type de données a été après le x:paramètre clé
OriginalL'auteur Eirik Lohne Bakken