尝试制作 WPF CRUD 应用程序,但由于某种未知原因,它向我显示静态资源错误

问题描述 投票:0回答:1

所以我试图根据我所学到的知识制作自己的 CRUD 应用程序,我确实知道我没有做任何错事,但由于某种原因,这个程序不断抛出有关静态资源页头的错误,我真的不知道知道为什么会抛出这个错误。这具体是输出“Exception throwed: 'System.Windows.Markup.XamlParseException' inPresentationFramework.dll”中引发的错误 “为‘System.Windows.StaticResourceExtension’提供值引发了异常。”行号‘23’和行位置‘24’。” 这是显示的错误https://imgur.com/WRHn1ea

主窗口.xaml

<Window x:Class="Crud.WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Crud.WPF" 
        xmlns:views="clr-namespace:Crud.WPF.Views"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Border Margin="20">
        <views:CrudView/>
    </Border>
</Window>

应用程序.xaml

<Application x:Class="Crud.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Crud.WPF">
    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="TextBlock"
                   x:Key="PageHeader">
                <Setter Property="FontSize"
                        Value="32"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

应用程序.xaml.cs

using System.Windows;

namespace Crud.WPF
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            MainWindow = new MainWindow();
            MainWindow.Show();

            base.OnStartup(e);
        }
    }
}

CrudView.xaml

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <TextBlock Grid.Column="0" 
                       Text="Crud"
                       FontSize="32"
                       Style="{StaticResource PageHeader}"/>
            
            <Button Grid.Column="1"
                    Content="Add"
                    HorizontalAlignment="Right"
                    VerticalAlignment="Center"/>
        </Grid>

        <Grid Grid.Row="1"
              Margin="0 20 0 0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <components:CrudListing Grid.Column="0"
                                    Margin="0 0 20 0"/>

            <components:CrudDetails Grid.Column="1"/>
        </Grid>
    </Grid>

我尝试了chatgpt和google bard,但他们只是说App.xaml中的“PageHeader”是用小写的“p”拼写的,这显然不是。我尝试再次观看视频教程,看看我是否错过了学习某些东西,但我没有。所以总的来说,这简直就是一场噩梦

c# .net wpf wpf-controls
1个回答
0
投票

尝试指定

StartupUri
而不是覆盖
OnStartup
方法:

<Application x:Class="Crud.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Crud.WPF"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="TextBlock"
                   x:Key="PageHeader">
                <Setter Property="FontSize"
                        Value="32"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

如果您出于某种原因需要以编程方式创建窗口,您可以处理

OnStartup
事件:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MainWindow = new MainWindow();
        MainWindow.Show();
    }
}

App.xaml:

<Application x:Class="Crud.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Crud.WPF"
             Startup="Application_Startup">
    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="TextBlock"
                   x:Key="PageHeader">
                <Setter Property="FontSize"
                        Value="32"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

因此,如果您像这样定义资源,请在

StartupUri
中使用
Startup
App.xaml
,但不要覆盖
OnStartup
中的
App.xaml.cs
方法。

© www.soinside.com 2019 - 2024. All rights reserved.