无法访问app.xaml中定义的资源

Der*_*aus 11 wpf resources xaml

我正在使用Visual Studio 2010 RC1.

我在app.xaml_中定义了一个资源"Brush2":

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

        <RadialGradientBrush x:Key="Brush2" RadiusX="1" RadiusY="1" GradientOrigin="0.3,0.3">
            <GradientStop Color="White" Offset="0"/>
            <GradientStop Color="#ffc0c0" Offset="1"/>
        </RadialGradientBrush>

    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

在我的Mainwindow中,我正在尝试使用该资源:

...
<Border Margin="4,2" BorderBrush="Black" BorderThickness="2" CornerRadius="4"
        ToolTip="{Binding Path=FullPath}" HorizontalAlignment="Stretch"
        Background="{StaticResource Brush2}">
...
Run Code Online (Sandbox Code Playgroud)

无论我做什么,它总是在运行时引发异常(未找到资源).我改变了构建操作但没有成功.

如何使用app.xaml中定义的资源?

cec*_*eco 19

如果您已将启动对象设置为自定义类,则需要创建自定义Application类并调用其InitializeComponent方法,如下所示:

App app = new App();
app.InitializeComponent();
Run Code Online (Sandbox Code Playgroud)

更新:由于@ qqww2建议InitializeComponent调用可以在App类构造函数中移动.

  • 或者,更好的是,将`InitializeComponent();`方法添加到`App`类的构造函数中.创建对象后无需记住函数调用. (3认同)

Hei*_*ner 8

不是使用StartupUriin启动我的应用程序App.xaml,而是使用事件处理程序 in App.xaml.cs

使用override Startup()App.xaml 中的资源时,不会加载:

public partial class App
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当使用事件时,Startup资源加载得很好:

<Application x:Class="OxyplotTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="OnStartup">
Run Code Online (Sandbox Code Playgroud)

和后面的代码:

public partial class App
{
    private void OnStartup(object sender, StartupEventArgs e)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

你所做的一切都是错误的.您要么以某种方式搞砸了项目构建,而是随机做事以试图让它工作或2)其他事情在这里进行,如果没有异常细节,我们永远不会知道.

我强烈建议你尝试在一个全新的WPF项目中重复这个.执行以下步骤(并且仅执行以下步骤):

创建一个新的WPF项目,将完全相同的画笔添加到app.xaml,然后打开Window1并将窗口的背景绑定到资源.运行应用程序.

它应该按预期工作.如果没有,请返回异常详细信息.如果是这样,请将此新项目与您当前的项目进行比较,以了解您的不同行为.

  • 就像给其他人的说明一样(我知道这个帖子很旧):我遇到了同样的问题。我的应用程序启动正常,但无法使用 App-resources。经过一些调查(与一个新项目相比),我意识到这些差异: 1. App.cs 中的静态 main 方法,这绝对不是必需的 | 2. 删除它会导致它错过条目的静态 main 方法 | 3. 缺少`x:Class="Project.App"`。最后一个固定第二个,因此所有问题。现在我可以像往常一样使用我的资源。Main 中的自定义内容现在位于 OnStartup / Startup 重载 / 处理程序中。 (3认同)