Я пытался искать это без радости, поэтому извиняюсь, если что-то пропустил.
У меня 2 проекта; ViewModels и Views. Представления ссылаются на ViewModels и служат корнем композиции.
Я хочу, чтобы App.xaml.cs создавал экземпляр MainWindow.xaml в проекте представлений и связывал MainWindowViewModel с его DataContext. Так далеко, так без происшествий. Проблема возникает, когда MainWindow.xaml использует статический ресурс из App.xaml.
В App.xaml.cs у меня есть:
public partial class App : Application
{
private StandardKernel container;
protected override void OnStartup(StartupEventArgs e)
{
this.container = new StandardKernel();
this.MainWindow = container.Get<MainWindow>();
}
}
В App.xaml у меня есть:
<Application x:Class="TestApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestApp">
<Application.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Blue"/>
</Style>
</Application.Resources>
В MainWindow.xaml у меня есть:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestApp"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Button Style="{StaticResource ButtonStyle}">Test</Button>
Когда я запускаю приложение, я получаю следующую ошибку:
Exception: Cannot find resource named 'ButtonStyle'. Resource names are case sensitive.
Я предполагаю, что из-за того, что я вручную устанавливаю MainWindow в методе OnStartup (), у класса MainWindow не установлен родительский параметр App? В результате среда выполнения не может разрешить «{StaticResource ButtonStyle}» для кнопки.
Как использовать контейнер IoC для создания представления (MainWindow.xaml), которое связывается со статическим ресурсом в App.xaml?