Я создаю приложение wpf и у меня есть вот такие строчки кода:
public MainWindow()
{
Background = (Brush)FindResource("Background");
}
Вот файл с окном:
<Window
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:MyApp"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="450" WindowStartupLocation="CenterScreen">
<Window.Resources>
<ResourceDictionary Source="Resources/MainWindow.xaml"/>
</Window.Resources>
<Grid>
</Grid>
</Window>
А вот сам словарь:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp">
<ImageBrush x:Key="Background" ImageSource="Sources/..."/>
</ResourceDictionary>
Мой фон не определяет. Т. е. изменения не применяются. Но если сделать вот так:
<Window
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:MyApp"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="450" WindowStartupLocation="CenterScreen"
Background="{StaticResource Background}">
<Window.Resources>
<ResourceDictionary Source="Resources/MainWindow.xaml"/>
</Window.Resources>
<Grid>
</Grid>
</Window>
то всё заработает. Как это пофиксить, чтоб работало и в коде, и в разметке. Когда отлаживал оказалось, что Count у свойства Resources равно нулю. Всё оч. странно.
Знаю два способа получения ресурсов в коде.
Первый:
var myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source =
new Uri("/DllName;component/MainWindow.xaml",
UriKind.RelativeOrAbsolute);
А затем получить по имени:
myResourceDictionary["Background"] as ImageBrush
Второй:
var imageBrush = (ImageBrush )Application.Current.FindResource("Background")
Второй способ подходит если вы используете один файл ресурсов в приложении.
А первый, если вы используете файл ресурсов в каком-то проекте один, а приложение использует другой файл ресурсов.
Нужно добавить InitializeComponent в MainWindow() и все заработало.
Продвижение своими сайтами как стратегия роста и независимости