WPF无法再找到简单的资源了

时间:2016-01-16 11:00:59

标签: .net wpf

我有一个非常简单的演示应用程序,用于测试目的。我刚刚添加了一个资源字典,现在WPF完全无法在运行时找到任何资源。 Visual Studio认为这些资源很好,并在可视化设计器中显示它的所有样式,但是当运行应用程序时,我得到XamlParseException说没有找到资源。这段代码除了我的其他工作应用程序什么都没有,我找不到任何区别。有什么问题?

以下是资源字典AppResources.xaml的一个示例:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- There need to be at least two styles if StartupUri is not used. -->
    <!-- See http://bengribaudo.com/blog/2010/08/19/106/bug-single-application-resources-entry-ignored -->
    <Style x:Key="__unused"/>

    <Style x:Key="InfoLabelStyle" TargetType="TextBlock">
        <Setter Property="Foreground" Value="Green"/>
    </Style>
</ResourceDictionary>

从App.xaml引用:

<Application
    x:Class="DemoApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Resources/AppResources.xaml"/>
                <ResourceDictionary Source="/Resources/AppResources2.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

这是由于未找到“InfoLabelStyle”而无法运行的MainWindow.xaml,而文本在设计器中已显示为绿色:

<Window
    x:Class="DemoApp.View.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DemoApp"
    Height="150" Width="525">

    <Grid>
        <TextBlock
            Margin="12"
            Style="{StaticResource InfoLabelStyle}"
            Text="Info"/>
    </Grid>
</Window>

您可以在此处找到完整的项目源代码:http://unclassified.de/tmp/DemoApp.zip

1 个答案:

答案 0 :(得分:1)

Application入口点添加对InitializeComponent Main方法的调用:

[STAThread]
public static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
    TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;

    var app = new App();
    app.InitializeComponent();
    app.Run();
}

What does InitializeComponent() do, and how does it work in WPF?

How to write custom Main method for a WPF application?