在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);
}
}
这是调用Scriptable myClas
的JSfunction _test()
{
slControl = document.getElementById("SilverlightControl");
slControl.Content.jsMyClass.SetVisual(1);
}
答案 0 :(得分: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();