Silverlight子窗口(ChildWindow)传递参数到父窗口演示
在Silverlight应用开发中,ChildWindow是一个非常重要的组件,它被用作弹出式对话框,可以用于显示警告、确认消息或进行用户交互。本文将深入探讨如何在ChildWindow中传递参数并将其返回到父窗口,以实现更复杂的业务逻辑。 我们需要了解ChildWindow的基本结构。ChildWindow是Silverlight提供的一个用户界面控件,它具有自己的标题、内容区域以及关闭按钮。创建一个新的ChildWindow子类,你可以自定义它的外观和功能。例如,我们可以创建一个名为`MyChildWindow`的类,继承自`ChildWindow`: ```csharp public partial class MyChildWindow : ChildWindow { public MyChildWindow() { InitializeComponent(); } } ``` 在ChildWindow中传递参数通常有两种方式:构造函数传参和依赖属性。 1. **构造函数传参**: 你可以在ChildWindow的构造函数中接收参数,然后在内部使用。例如,假设我们想要传递一个字符串参数: ```csharp public MyChildWindow(string param) { InitializeComponent(); // 在这里处理参数 } ``` 在父窗口中打开ChildWindow时,直接传入参数: ```csharp MyChildWindow child = new MyChildWindow("传递的参数"); child.Show(); ``` 2. **依赖属性**: 另一种方法是通过设置ChildWindow的依赖属性来传递参数。在ChildWindow类中声明一个依赖属性: ```csharp public static readonly DependencyProperty MyParameterProperty = DependencyProperty.Register("MyParameter", typeof(string), typeof(MyChildWindow), null); public string MyParameter { get { return (string)GetValue(MyParameterProperty); } set { SetValue(MyParameterProperty, value); } } ``` 然后在父窗口中创建ChildWindow实例并设置属性: ```csharp MyChildWindow child = new MyChildWindow(); child.MyParameter = "传递的参数"; child.Show(); ``` ChildWindow关闭时,我们可能需要将结果或处理后的数据返回给父窗口。这可以通过事件或者回调函数实现。 1. **事件**: 在ChildWindow中定义一个自定义事件,如`ClosedWithResult`,并在关闭时触发该事件,同时附带返回值: ```csharp public event RoutedEventHandler ClosedWithResult; private void OnCloseButton_Click(object sender, RoutedEventArgs e) { RoutedEventArgs args = new RoutedEventArgs(ClosedWithResultEvent); args.RoutedEvent = ClosedWithResultEvent; RaiseEvent(args); } ``` 父窗口订阅此事件并处理结果: ```csharp child.ClosedWithResult += (s, e) => { string result = ((MyChildWindow)s).MyParameter; // 获取返回值 }; ``` 2. **回调函数**: 也可以在父窗口中提供一个闭包作为参数,ChildWindow关闭时调用这个回调: ```csharp public delegate void ResultCallback(string result); public void ShowWithCallback(ResultCallback callback) { this.callback = callback; Show(); } private void OnCloseButton_Click(object sender, RoutedEventArgs e) { callback?.Invoke("返回的结果"); } ``` 父窗口使用闭包: ```csharp child.ShowWithCallback(result => { // 处理返回的结果 }); ``` 通过以上方式,我们可以灵活地在Silverlight的ChildWindow与父窗口之间传递参数,并获取ChildWindow的操作结果。这在处理用户输入、验证或其他需要交互的任务时非常有用。请确保在实际项目中正确处理线程同步问题,尤其是在异步操作中。
- 1
- 江苏小码农2011-12-09确实是个方法,但算不上是个好办法,页面之间传递参数这种方法应该算是效率比较低的一种,刚开始误以为高分出精品,10分确实不值得。
- penzhangzz2012-08-08同意楼上观点,下载下来基本没有用!真不值!
- 粉丝: 1
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助