none
MainWindow.xaml在WPF项目的一个文件夹下,无法引用App.xaml里的资源? RRS feed

  • 问题

  • 如图是我的文件夹结构。出于某些原因,我需要把MainWindow.xaml放在UI文件夹里,并且MainWindow所处的命名空间是WpfApplication2.UI。App.xaml的位置无所谓,我现在是把它放在UI下,命名空间也是WpfApplication2.UI。

    App.xaml里我定义了一个画刷

    <Application x:Class="WpfApplication2.UI.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
        <Application.Resources>
            <SolidColorBrush x:Key="myBrush"  Color="Red"/>
        </Application.Resources>
    </Application>

    App.xaml.cs

    using System;
    using System.Windows;
    
    namespace WpfApplication2.UI
    {
        /// <summary>
        /// App.xaml 的交互逻辑
        /// </summary>
        public partial class App : Application
        {
            [STAThread]
            public static void Main()
            {
                var w = new MainWindow();
                var app = new App();
    
                app.Run(w);
            }
        }
    }

    MainWindow.xaml里引用这个画刷

    <Window x:Class="WpfApplication2.UI.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" Background="{StaticResource ResourceKey=myBrush}"> 
        <Grid>
            
        </Grid>
    </Window>

    运行说找不到资源。请问怎么解决?


    2012年5月9日 5:46

答案

  • 你新建并且运行了App,但是你没有做  app类本身不会去反序列化其App.xaml资源,所以你自己创建App对象去run的话,你就需要手动的加载反序列化其App.xaml了(还有,注意生成顺序,先反序列化App.xaml然后创建MainWindow):

        [STAThread]
        public static void Main()
        {
          var app = new App();
          System.Windows.Application.LoadComponent(app, new System.Uri("app.xaml", System.UriKind.Relative));
          var w = new MainWindow();
          app.Run(w);
        }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月9日 10:55
    版主

全部回复

  • 你新建并且运行了App,但是你没有做  app类本身不会去反序列化其App.xaml资源,所以你自己创建App对象去run的话,你就需要手动的加载反序列化其App.xaml了(还有,注意生成顺序,先反序列化App.xaml然后创建MainWindow):

        [STAThread]
        public static void Main()
        {
          var app = new App();
          System.Windows.Application.LoadComponent(app, new System.Uri("app.xaml", System.UriKind.Relative));
          var w = new MainWindow();
          app.Run(w);
        }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月9日 10:55
    版主
  • 是的,我刚才吃饭前注意到了问题,不过没想出解决方法。原来可以用System.Windows.Application.LoadComponent,谢谢版主。
    2012年5月9日 11:39