XAML:访问应用程序的 ResourceDictionary 中的任意对象

发布于 2024-10-21 19:55:53 字数 771 浏览 1 评论 0原文

作为 XAML/WPF 新手,我尝试将任意(即非 WPF)对象放入我的应用程序资源中

<Application x:Class="MyApp.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:a="clr-namespace:MyApp"
         >
  <Application.Resources>
    <a:MyClass x:Key="Model"/>
  </Application.Resources>
</Application>

,并使用 FindResource 从我的代码隐藏文件中访问它,

public partial class App : Application
{
  protected override void OnStartup(StartupEventArgs e) {
    base.OnStartup(e);
    var obj = (MyClass)this.FindResource("Model");
    obj.DoSomething();
  }
}

得到了一个 ResourceReferenceKeyNotFoundException 。如果有人能告诉我我做错了什么,我将非常感激!

being a XAML/WPF newbie, I tried to put an arbitrary (i.e. non-WPF) object into my applications resources like

<Application x:Class="MyApp.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:a="clr-namespace:MyApp"
         >
  <Application.Resources>
    <a:MyClass x:Key="Model"/>
  </Application.Resources>
</Application>

and access it from my code-behind file using

public partial class App : Application
{
  protected override void OnStartup(StartupEventArgs e) {
    base.OnStartup(e);
    var obj = (MyClass)this.FindResource("Model");
    obj.DoSomething();
  }
}

FindResource got me a ResourceReferenceKeyNotFoundException. I'd be very grateful if someone could tell me what I'm doing wrong!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这样的小城市 2024-10-28 19:55:53

好吧,看来资源字典(还没有?)在重写的 OnStartup 方法中初始化,但在 Startup 事件处理程序中可用。

当我使用 Startup event 而不是重写 OnStartup 时:

<Application x:Class="MyApp.App"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:a="clr-namespace:MyApp"
     Startup="Application_Startup"
         >

一切

private void Application_Startup(object sender, StartupEventArgs e) {

正常!

Ok, it seems that the Resource dictionary is not (yet?) initialized in the overridden OnStartup method but available in an Startup event handler.

When I use the Startup event instead of overriding OnStartup like:

<Application x:Class="MyApp.App"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:a="clr-namespace:MyApp"
     Startup="Application_Startup"
         >

and

private void Application_Startup(object sender, StartupEventArgs e) {

everything worked fine!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文