Как получить контроль над регионом в Prism

Кто-нибудь знает, как получить контроль, связанный с регионом в Prism.

Например, если у меня есть следующий код для регистрации региона

RegionManager.SetRegionName(Outlook.navigationContainer, "navigationContainer");

Как я могу получить элемент управления Outlook.navigationContainer через имя «navigationContainer»?

Огромное спасибо.


person Community    schedule 30.08.2009    source источник


Ответы (4)


Чтобы ответить на ваш вопрос:

Вероятно, вы могли бы создать что-то, что отслеживает это, используя пользовательское поведение региона. Подробные сведения о RegionBehaviors можно найти здесь: http://msdn.microsoft.com/en-us/library/dd458944.aspx

Вы бы просто создали словарь, который отслеживал бы название региона и связанный с ним элемент управления, поскольку у вас есть доступ к обоим из поведения региона.

Если вам нужен доступ к элементу управления во время добавления представления в регион, вы можете использовать для этой цели адаптер региона (подробности по той же ссылке выше).

Однако я согласен с Кентом на 150 % в том, что чувствую, что вы делаете то, чего не должны делать. Если вы пытаетесь настроить макет или создать анимацию и т. д., вам действительно следует сосредоточиться на стратегии, которая не требует от вас нарушения абстракции, которую дают вам регионы.

Что-то столь же простое, как стиль с триггерами данных, может дать вам то, что вы ищете, и не заставит вас слишком много знать о контейнере из кода, который добавляет представления в регион.

person Anderson Imes    schedule 30.08.2009
comment
Привет, я согласен с тем, что вы говорите, однако, что, если у меня есть сложные функции, такие как изменение свойства в элементе управления регионом, в зависимости от того, что вводится. Единственный способ, которым я вижу, что это может быть достигнуто, - это открыть элемент управления или, по крайней мере, его интерфейс. Есть предложения? - person ; 31.08.2009
comment
Вы можете использовать адаптер региона для достижения этого, но звучит странно, что вам нужно изменить контейнер на основе содержимого, не являясь при этом стилем, а не чем-то, что вы делаете императивно. Я бы предложил изучить возможность использования стиля здесь с DataTriggers. - person Anderson Imes; 31.08.2009

Предполагается, что регионы абстрагируют от вас специфику управления регионом. Зачем вам нужен контроль?

person Kent Boogaart    schedule 30.08.2009
comment
Привет, Кент, я согласен с тем, что вы говорите, однако, что, если у меня есть сложные функции, такие как изменение свойства в элементе управления регионом, в зависимости от того, что вводится. Единственный способ, которым я вижу, что это может быть достигнуто, - это открыть элемент управления или, по крайней мере, его интерфейс. Есть предложения? - person ; 31.08.2009

Я не думаю, что вы можете легко получить соответствующий элемент управления через имя региона.

Метод SetRegionName устанавливает только DependencyProperty «RegionNameProperty» для указанного элемента управления. Единственное, что вы можете сделать, это вернуть имя, когда вы получите контроль.

person Mischa    schedule 30.08.2009

Подумай о,

Если вы хотите изменить свойство модуля, внедренного в регион, лучший способ сделать это — использовать маршрутизируемое событие или маршрутизируемую команду в зависимости от ситуации.

Как я это делаю, когда модуль инициализируется, я подписываюсь на события для свойств, которые необходимо изменить. Если какой-либо другой модуль в системе должен изменить это свойство, я просто запускаю событие.

Надеюсь, это поставит вас на правильный путь.

С уважением Корнелиус Крюгер

person Cornelius Kruger    schedule 17.09.2009