Ошибка - не удается найти статический ресурс в приложении WPF - PullRequest
11 голосов
/ 26 мая 2010

Я изучаю WPF и начал с этого учебного пособия по MSDN.

Я просто следовал уроку. Когда я закончил код в соответствии с руководством и попытался запустить, я получил исключение на странице XAML, которое говорит

'Предоставить значение для' System.Windows.StaticResourceExtension ', вызвавшего исключение.' Номер строки "27" и позиция строки "55". " Имена ресурсов чувствительны к регистру. ".

Виновник 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="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>

У меня есть требуемый шаблон внутри ресурсов Grid, поэтому я добавляю его как статический ресурс. Тем не менее, он выдает исключение, что табличка данных недоступна.

Ответы [ 3 ]

28 голосов
/ 26 мая 2010

Переместите <Grid.Resources> ... </Grid.Resources> наверх вашего определения сетки, и оно будет работать. Представляется, что DataTemplate необходимо определить до того, как на него будет ссылаться. Я скопировал ваш пример в приложение и подтвердил, что перемещение раздела Ресурсы вверх решило проблему.

3 голосов
/ 25 июня 2013

Есть несколько причин этой ошибки. Решение моей проблемы состояло в том, что мне не удалось добавить «InitializeComponent ();» поэтому в конструкторе Application Xaml, содержащий ResourceDictionary, никогда не инициализировался. Отсюда и ошибка «Не могу найти ...» Я не упомянул, что занимаюсь ручным кодированием. Если вы генерируете код через Visual Studio, это не требуется.

0 голосов
/ 08 октября 2018

Я получил ту же ошибку, но ни один из ответов выше не сработал.

Моя ошибка была решена путем изменения XAML на табличке данных с:

<DataTemplate DataType="local:DtoDmParent" x:Key="dataTemplateDtoDmParent"  >
    <TextBlock Text="test"/>
</DataTemplate>

до

<DataTemplate x:Key="dataTemplateDtoDmParent" DataType="local:DtoDmParent" >
    <TextBlock Text="test"/>
</DataTemplate>

Изменение таким образом, чтобы параметр Datatype был после параметра x: key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...