Как назначить RootVisual из другого класса
В silverlight
Я пытаюсь назначить RootVisual
объект из другого класса.
Причина в том, что JavaScript будет выполнять некоторые Ajax
запросы и нужно будет динамически изменять UI element
в любое время.
Вот что я сделал до сих пор, похоже, это не работает.
public class MyClass
{
private UIElement _rootVisual;
public MyClass(UIElement root)
{
_rootVisual = root;
}
public bool SetVisual(int id)
{
switch(id) {
case 0:
this._rootVisual = new MyUI1();
break;
default:
this._rootVisual = new MyUI2();
break;
}
return true;
}
Вот мой App.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
// Create A Scriptable object
this.myclass= new MyClass( this.RootVisual );
// Register Scriptable for JS Interop
HtmlPage.RegisterScriptableObject("jsMyClass", myclass);
//Load the initial UI but should be able to access/change later via JS
myclass.LoadScene(0);
}
}
Вот JS, который вызывает Scriptable myClas
function _test()
{
slControl = document.getElementById("SilverlightControl");
slControl.Content.jsMyClass.SetVisual(1);
}
1 ответ
Решение
То, как я это делаю, заключается в том, чтобы сохранить корень визуальным, но изменить его содержимое.
Итак, в вашем файле App.cs вы делаете это
//Setup a root content user control so we can swap out the content depending on what we want to show
UserControl RootContent = new UserControl();
RootContent.HorizontalAlignment = HorizontalAlignment.Stretch;
RootContent.VerticalAlignment = VerticalAlignment.Stretch;
DispatcherHelper.Initialize();
this.RootVisual = RootContent;
(this.RootVisual as UserControl).Content = new SplashScreenView();
И тогда, когда вы хотите переключиться на другое представление, вы можете просто сделать это
(App.Current.RootVisual as UserControl).Content = new Views.PreQualView();