所以我试图根据我所学到的知识制作自己的 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”拼写的,这显然不是。我尝试再次观看视频教程,看看我是否错过了学习某些东西,但我没有。所以总的来说,这简直就是一场噩梦
尝试指定
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
方法。