Я создаю приложение 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()
и все заработало.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо клонировать коллекцию так, чтобы все её объекты Element так же отвязались от исходной коллекцииПодскажите, как лучше всего это сделать?
Собственно вопросБыли мысли сделать подобное через relative source, но как это передать в код - не знаю