powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обращение к xaml объектам из класса
8 сообщений из 8, страница 1 из 1
Обращение к xaml объектам из класса
    #39273178
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

подскажите пожалуйста как правильно обращаться к объектам определенным в xaml из кода, который не связан с ним напрямую,
т.е. мы просто создаем сторонний класс в том же пакете и из него нужно изменить надпись в объекте Label.
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39273188
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обращаться к xaml-объектам из кода не правильно в принципе. Курите MVVM.

archeliteиз него нужно изменить надпись в объекте Label.Привязать Label.Text к свойству модели. Менять свойство.
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39273253
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archelite,

не совсем понял сути вопроса.

Каждый элемент XAML кода представляет из себя обычный класс, если мы говорим про элементы визуального дерева, то это скорее всего классы наследованные от UIElement или если смотреть более глубоко то Visual. Если речь идет об элементах находящихся в ресурсах визуального дерева, то это может быть совершенно любой тип.
Для UIElement'ов можно определить имя через свойство x:Name="Имя элемента"
Для ресурсов задается ключ x:Key="Ключ ресурса". Ключём ресурса может выступать объект любого типа, а не обязательно строка. А в некоторых случаях его можно не указать и он будет назначен по умолчанию (например для стилей из свойства TargetType)

Обратиться к элементам можно:
а) по имени, с помощью метода FindName(string), но только если вы находитесь в области видимости этого объекта. То есть, если вы ищете объект "TextBox1" в классе окна.
Либо, просто как в WF по имени TextBox1.Text = "";
б) по имени элемента шаблона методом GetTemplateChild(string). Часть элемента шаблона можно получить только в самом элементе управления, для которого этот шаблон определен. Делать это нужно из переопределенного метода OnApplyTemplate, это гарантирует то, что объект будет создан на момент его поиска.
в) с помощью метода FindResource или TryFindResource для поиска объекта определенного в ресурсах. Поиск осуществляется в визуальном дереве, в ресурсах окна, приложения и сборки
г) с помощью VisualTreeHelper можно найти любой элемент визуального дерева, осуществляя поиск рекурсивно вверх и вниз.
д) с помощью Binding'а, можно задать свойству другого элемента управление ссылка на нужный элемент через {Binding ElementName=TextBox1} или с помощью поиска по визуальному дереву {Binding RelativeSource={RelativeSource ...}}
Но, все выше перечисленные методы используются только в рамках View, то есть на уровне элементов управления. Лично я, по большей части стараюсь избегать именования объекта в XAML, только если мне действительно нужно его найти.
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39273999
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, разобрался, сделал.

Доступ можно получить например так

static wImp currWindow = (wImp) System.Windows.Application.Current.Windows[1];

wImp наш сторонний класс, который отвечает за обработку определенной инфы, полученной из формы.
(wImp) System.Windows.Application.Current.Windows[1] - получаем массив окон приложения, где 0-главное окно приложения, 1 - второй уровень и т.д. В моем случае нужен был второй уровень. Приводим полученный объект к нужному типу и пользуемся)
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39274007
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archeliteВсем спасибо, разобрался, сделал.

Доступ можно получить например так

static wImp currWindow = (wImp) System.Windows.Application.Current.Windows[1];

wImp наш сторонний класс, который отвечает за обработку определенной инфы, полученной из формы.
(wImp) System.Windows.Application.Current.Windows[1] - получаем массив окон приложения, где 0-главное окно приложения, 1 - второй уровень и т.д. В моем случае нужен был второй уровень. Приводим полученный объект к нужному типу и пользуемся)
жуть, а если 2ым окном будет не wImp, а другое? то тогда, что?
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39274049
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesжуть, а если 2ым окном будет не wImp, а другое? то тогда, что?

создадим ссылку и на него) мне нужно сделать небольшую формочку для отчетов, так что городить громоздкий абстрактный лес нет особого смысла, хотя конечно в будущем для серьезных проектов придется разобраться
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39274092
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот с такого, извините за выражение, "говнокода" и начинаются траблы, а потом будет уже поздно.
Всё нужно сразу делать нормально, хотя бы просто "потому что" :)
я практически 24 часа в сутки на WPF кодю и за всё время работы, я не разу не искал окна и тем более не делал ссылку на них статической.
С окнами действительно есть некоторые геморои, особенно если используешь MVVM шаблон, но всё это решается написанием WindowManager'а или используя существующий.
...
Рейтинг: 0 / 0
Обращение к xaml объектам из класса
    #39274245
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archeliteДобрый день

подскажите пожалуйста как правильно обращаться к объектам определенным в xaml из кода, который не связан с ним напрямую,
т.е. мы просто создаем сторонний класс в том же пакете и из него нужно изменить надпись в объекте Label.Искать через VisualTreeHelper или LogicalTreeHelper.

Примеры
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обращение к xaml объектам из класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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