这是我的代码或WFP中的错误吗?使用VisualStudio 2013,以.NET 4.5.1为目标.
<Application x:Class="WPFDemo.MyApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:WPFDemo.ViewModels">
<Application.Resources>
<vm:TestClass x:Key="tc" />
</Application.Resources>
</Application>
public partial class MyApp : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var mainWindow = new MainWindow();
mainWindow.Show();
}
}
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
object o = Application.Current.Resources["tc"];
}
}
Run Code Online (Sandbox Code Playgroud)
问题:o为空.
如果我添加至少一个任何类型的其他资源:
<Application.Resources>
<vm:TestClass x:Key="tc" />
<vm:TestClass2 x:Key="tc2" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
并且不会在任何地方进行任何其他更改,o作为TestClass的实例返回.
咦?
我发现Application.Resources在StartupURI没有定义时不加载时很少引用bug
并且似乎有3个解决此问题的方法(4包括创建虚拟资源)
定义字典
<Application.Resources>
<ResourceDisctionary>
<ResourceDictionary.MergedDictionaries/>
<vm:TestClass x:Key="tc" />
</ResourceDisctionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
但它似乎很奇怪,因为它需要空ResourceDictionary.MergedDictionaries标签
不要覆盖OnStartup方法,而是使用Startup事件
<Application ... Startup="Application_Startup">
Run Code Online (Sandbox Code Playgroud)
并在代码中
private void Application_Startup(object sender, StartupEventArgs e)
{
var mainWindow = new MainWindow();
mainWindow.Show();
}
Run Code Online (Sandbox Code Playgroud)
给你Application一个名字
<Application ... x:Name="myApplication">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |