Uczę się WPF i rozpocząłem z samouczkiem MSDN z this.- Nie można znaleźć statycznego zasobu w aplikacji WPF
Właśnie korzystałem z samouczka. Kiedy skończyłem kod zgodnie z samouczka i spróbuj uruchomić otrzymuję wyjątek strony XAML, który mówi
"Podaj wartość na«System.Windows.StaticResourceExtension»zwrócił wyjątek. Numer linii "27" i pozycja linii "55". "I wewnętrzny wyjątek pokazuje, że błąd to" Nie można znaleźć zasobu o nazwie "personItemTemplate". Nazwy zasobów jest wielkość liter. ".
Sprawca XAML jest poniżej.
<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>
Mam żądany szablon wewnątrz zasobów siatki, a więc dodanie go jako zasób statycznej. Mimo to rzuca wyjątek, że datatemplate nie jest dostępny
Tak, próbowałem tego losowo właśnie teraz i przyszedłem tutaj, aby zaktualizować odpowiedź. Ale byłeś pierwszy. :-) Przyjmuję twoją odpowiedź. Każdy powód, dla którego odniesienie do zasobu zachowuje się w ten sposób? – blntechie
Cóż, nie wiem na pewno. Na pierwszy rzut oka wydaje się, że parsuje on XAML w porządku sekwencyjnym, a więc nie wie, co to jest "personItemTemplate", kiedy jest on pierwszym odnośnikiem. Jednak nie wie, jaki jest twój "ExpenseDataSource", pomimo tego, gdzie jest umieszczony. Więc ... Będę musiał odłożyć się na kogoś z większą wiedzą, aby uzyskać lepsze wyjaśnienie. :) –
Dzięki. Po prostu nienawidzę WPF do tego :-D –