powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF4, ресурсы
3 сообщений из 3, страница 1 из 1
WPF4, ресурсы
    #37758389
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется из ресурса иметь ссылку на элемент, который его содержит. Не хочется для этого вручную что-либо прописывать в XAML. Видится примерно такое решение:
Осторожно, код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
    public static class UiResourceHelper
    {
        // Присоединяемое свойство, устанавливается однократно в стиле для всех Window приложения
        #region IsChildResourcesAttached Property

        public static readonly DependencyProperty IsChildResourcesAttachedProperty =
            DependencyProperty.RegisterAttached(
                "IsChildResourcesAttached",
                typeof(bool),
                typeof(UiResourceHelper),
                new FrameworkPropertyMetadata(
                    false,
                    FrameworkPropertyMetadataOptions.Inherits, // наследуемое свойство
                    IsChildResourcesAttachedChanged
                )
            );

        public static bool GetIsChildResourcesAttached(DependencyObject target)
        {
            return (bool)target.GetValue(IsChildResourcesAttachedProperty);
        }

        public static void SetIsChildResourcesAttached(DependencyObject target, bool value)
        {
            target.SetValue(IsChildResourcesAttachedProperty, value);
        }

        static void IsChildResourcesAttachedChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var element = sender as FrameworkElement;
            var newValue = (bool)e.NewValue;

            if (element != null)
                foreach (var resource in element.Resources.Values.OfType<IChildResource>())
                    resource.Parent = newValue ? element : null;
        }

        #endregion
    }

    // Интерфейс, реализуемый в классах ресурсов
    public interface IChildResource
    {
        FrameworkElement Parent { get; set; }
    }

Может есть способ лучше?
...
Рейтинг: 0 / 0
WPF4, ресурсы
    #37758558
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большие подозрения, что будут утечки памяти. Зачем это нужно?
...
Рейтинг: 0 / 0
WPF4, ресурсы
    #37758567
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЕсть большие подозрения, что будут утечки памяти.Хммм... Вроде как время жизни ресурса == времени жизни его "владельца". А что может ещё вызвать утечку памяти?
SeVaЗачем это нужно?В настоящее время хочется подписаться на событие Loaded "владельца" ресурса. В перспективе может ещё для чего-нибудь.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF4, ресурсы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]