LightSwitch - получение AutoCompleteBox с FindControl, становится нулевым при приведении

Я пытаюсь получить доступ к AutoCompleteBox на одном из моих экранов. я могу увидеть это FindControl() обнаружил контроль, когда я делаю var testControl = FindControl("MyControl");

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

Это то, что я делаю:

System.Windows.Controls.AutoCompleteBox testBox = new System.Windows.Controls.AutoCompleteBox();
testBox = testControl as System.Windows.Controls.AutoCompleteBox;

testBox будет нулевым

Это определенно говорит, что контроль является AutoCompleteBox на экране я не уверен, что я делаю неправильно. Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: Благодаря Янн, я смог решить эту проблему с помощью следующего кода:

this.FindControl("MyControl").ControlAvailable += (p, e) =>
        {
            //For every  use I can just cast like ((System.Windows.Controls.AutoCompleteBox)e.Control)
        };

2 ответа

Решение

Объект, который вы получаете от FindControl как вы обнаружили, это просто прокси- объект. Способ получить реальный контроль осуществляется в два этапа:

  1. Добавить код на экранCreated метод (элемент управления не гарантированно будет доступен до Created метод работает).
  2. Затем добавьте обработчик для прокси ControlAvailable метод.
Private Sub ScreensName_Created

      FindControl("ControlsName"). AddressOf ControlsName_ControlAvailable

End Sub

Private Sub ControlsName_ControlAvailable(sender as Object, e as ControlAvailableEventArgs)

    'do whatever you want in here
    'you can cast e.Control to whatever is the type of the underlying Silverlight control.

End Sub

Конечно, вам нужно заменить "ScreensName" и "ControlsName" на ваши собственные имена.

(По какой-то причине я не смог успешно отформатировать весь текст двух методов как код)

Если as возвращает ноль, вы пытаетесь привести к неверному типу. Я другие слова, testControl не тип AutoCompleteBox,

Поместите точку останова на эту вторую строку и посмотрите, какой тип testControl действительно во время выполнения.

Другие вопросы по тегам