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%下的效果图:


其实美工图是这样的:

我们修改一下标题栏,让它看起来更像美工图:


最终完成界面 :