|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
Добрый день подскажите пожалуйста как правильно обращаться к объектам определенным в xaml из кода, который не связан с ним напрямую, т.е. мы просто создаем сторонний класс в том же пакете и из него нужно изменить надпись в объекте Label. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 15:14 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
обращаться к xaml-объектам из кода не правильно в принципе. Курите MVVM. archeliteиз него нужно изменить надпись в объекте Label.Привязать Label.Text к свойству модели. Менять свойство. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 15:23 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
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, только если мне действительно нужно его найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 16:28 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
Всем спасибо, разобрался, сделал. Доступ можно получить например так static wImp currWindow = (wImp) System.Windows.Application.Current.Windows[1]; wImp наш сторонний класс, который отвечает за обработку определенной инфы, полученной из формы. (wImp) System.Windows.Application.Current.Windows[1] - получаем массив окон приложения, где 0-главное окно приложения, 1 - второй уровень и т.д. В моем случае нужен был второй уровень. Приводим полученный объект к нужному типу и пользуемся) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2016, 16:52 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
archeliteВсем спасибо, разобрался, сделал. Доступ можно получить например так static wImp currWindow = (wImp) System.Windows.Application.Current.Windows[1]; wImp наш сторонний класс, который отвечает за обработку определенной инфы, полученной из формы. (wImp) System.Windows.Application.Current.Windows[1] - получаем массив окон приложения, где 0-главное окно приложения, 1 - второй уровень и т.д. В моем случае нужен был второй уровень. Приводим полученный объект к нужному типу и пользуемся) жуть, а если 2ым окном будет не wImp, а другое? то тогда, что? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2016, 17:03 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
Roman Mejtesжуть, а если 2ым окном будет не wImp, а другое? то тогда, что? создадим ссылку и на него) мне нужно сделать небольшую формочку для отчетов, так что городить громоздкий абстрактный лес нет особого смысла, хотя конечно в будущем для серьезных проектов придется разобраться ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2016, 17:45 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
вот с такого, извините за выражение, "говнокода" и начинаются траблы, а потом будет уже поздно. Всё нужно сразу делать нормально, хотя бы просто "потому что" :) я практически 24 часа в сутки на WPF кодю и за всё время работы, я не разу не искал окна и тем более не делал ссылку на них статической. С окнами действительно есть некоторые геморои, особенно если используешь MVVM шаблон, но всё это решается написанием WindowManager'а или используя существующий. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2016, 18:48 |
|
Обращение к xaml объектам из класса
|
|||
---|---|---|---|
#18+
archeliteДобрый день подскажите пожалуйста как правильно обращаться к объектам определенным в xaml из кода, который не связан с ним напрямую, т.е. мы просто создаем сторонний класс в том же пакете и из него нужно изменить надпись в объекте Label.Искать через VisualTreeHelper или LogicalTreeHelper. Примеры ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2016, 06:02 |
|
|
start [/forum/topic.php?fid=21&fpage=11&tid=1440645]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 197ms |
0 / 0 |