C# 添加样式后引发异常
我正在尝试向我的应用程序添加全局样式。将节添加到my App.xaml后,我遇到了一个令人困惑的运行时异常: 中发生类型为“System.IO.IOException”的未处理异常 PresentationFramework.dll找不到资源 “views/views/createjob.xaml” 在设计时,我可以看到我的样式在VisualStudio的“设计/预览”面板中被正确应用 我在网上看到的大多数示例都显示了在样式上设置一个键属性,然后由使用它的每个窗口显式引用。我正在寻找全局性的东西,也就是说,我不需要每次都遍历代码库并显式引用样式 完整App.xamlC# 添加样式后引发异常,c#,wpf,data-binding,C#,Wpf,Data Binding,我正在尝试向我的应用程序添加全局样式。将节添加到my App.xaml后,我遇到了一个令人困惑的运行时异常: 中发生类型为“System.IO.IOException”的未处理异常 PresentationFramework.dll找不到资源 “views/views/createjob.xaml” 在设计时,我可以看到我的样式在VisualStudio的“设计/预览”面板中被正确应用 我在网上看到的大多数示例都显示了在样式上设置一个键属性,然后由使用它的每个窗口显式引用。我正在寻找全局性的东西
<Application x:Class="TestApp.Views.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestApp"
StartupUri="Views/CreateJob.xaml">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Application.Resources>
完整的CreateJob.xaml
<Window x:Class="TestApp.Views.CreateJob"
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:TestApp"
mc:Ignorable="d"
Title="CreateJob" Height="450" Width="800">
<StackPanel Orientation="Horizontal">
<Label Content="Name"/>
<TextBox/>
</StackPanel>
完整的CreateJob.xaml.cs
using System.Windows;
namespace TestApp.Views
{
/// <summary>
/// Interaction logic for CreateJob.xaml
/// </summary>
public partial class CreateJob : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
使用System.Windows;
命名空间TestApp.Views
{
///
///CreateJob.xaml的交互逻辑
///
公共部分类CreateJob:Window
{
公共主窗口()
{
初始化组件();
}
}
}
完整App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
根据您提供的代码,您正在查找错误的资源 您让它查找
视图/CreateJob.xaml
,但您给我们的是标题为“CreateJob”的MainWindow.xaml
。资源uri正在查找实际的文件名,而不是标题。像这样更新它,它就会工作
StartupUri="Views/MainWindow.xaml"
您的CreateJob.xaml位于哪里?您是指“views/views/createjob.xaml”而不是“views/createjob.xaml”吗?这就是错误消息所暗示的。@mm8它与App.xaml([project]/Views/CreateJob.xaml)位于同一文件夹和项目中。删除样式后,CreateJob.xaml将正确加载。@mm8 App.xaml位于[project]/Views/下。正确,如果我的App.xaml没有样式,它运行良好。请提供您问题的可复制示例:@mm8我在相同的结构中从头开始重新创建了一个最小项目,并更新了我问题中的代码。忽略样式后,它将运行并显示基本表单。添加样式后,它会抛出完全相同的异常。抱歉。这是由于试图提供更新的完整代码示例造成的。我已经更新了代码。问题仍然存在。如果StartupUri=“Views/CreateJob.xaml”>在Application.Resources中没有样式,则应用程序可以正常加载。一旦我添加了一个样式,就会出现运行时异常,突然找不到CreateJob.xaml。我认为StartupUri应该是CreateJob.xaml,因为它与App.xaml位于同一个目录中。我还认为错误消息是正确的,因为相对路径Views/CreateJob.xaml是错误的。但是,我不明白为什么省略样式时不抛出此异常。这似乎是我的代码中的一个bug(不正确的StartupUri)和WPF的奇怪/不一致行为的组合。