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
как вы обнаружили, это просто прокси- объект. Способ получить реальный контроль осуществляется в два этапа:
- Добавить код на экран
Created
метод (элемент управления не гарантированно будет доступен доCreated
метод работает). - Затем добавьте обработчик для прокси
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
действительно во время выполнения.