Silverlight 3 Beta发布了!其中,ChildWindow是一个令人激动的控件。使用ChildWindow,终于在应用程序里轻松地弹出对话框,而不用Popup。接下来我就在项目里添加一个登录的对话框:
在解决方案中添加一个ChildWindow:
在Experssion Blend 3里打开LoginWindow,可以看到Silverlight已经为我们添加了一些项目:
按照美工图,把界面修改如下:
接下来修改代码,我把弹出登录窗口放在Socket连接上服务器后:
protected void OnClientConnected(object sender, AsyncConnectionEventArgs e) { Call((Action)Login); }
Call函数把Dispatcher.BeginInvoke做了一个简单的封装,负责跨线程更新UI对象:
public void Call(Action action) { Dispatcher.BeginInvoke(action); }
真正的Login方法,向服务器发送用户输入的帐号和密码:
public void Login() { LoginWindow lw = new LoginWindow(); lw.Closed += (s2, e2) => { if (lw.DialogResult == true) { XElement xe = new XElement("login", new XAttribute("name", lw.UserName), new XAttribute("password", lw.UserPassword)); m_Client.Send(m_Encoding.GetBytes(xe.ToString(SaveOptions.None))); } }; lw.Show(); }
以下是运行时的截图,很漂亮吧?!
还可以通过设置模板,来修改对话框样式:
400%下的效果图:
其实美工图是这样的:
我们修改一下标题栏,让它看起来更像美工图:
最终完成界面 :