WPF通过委托跨页面修改界面控件,并传值原理完全解析
2017-01-04 17:19
501 查看
网上有很多讲WPF修改控件的,但是大部分都只是代码占据了很大的篇幅,没有详细讲解过程。所以有了我这篇文章。我希望每一个看到这篇文章的朋友都可以看懂,另外不要被太长的标题吓到。
通过委托跨页面修改控件,所谓的原理就是,构造一个可以触发事件A的静态类,然后对页面做出修改的事件B绑定事件A,然后当事件A被触发后,页面里绑定的事件B也被触发响应,于是对页面做出修改。
下面这个图,就是对静态类中的事件A如何触发页面中的事件B,进而跨页面修改界面进行说明的
![](http://img.blog.csdn.net/20170104170828351?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9vbmdza2luZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
看了上图想必大家已经明白了。另外进一步的加深了解可以看我自己一个小项目里面的代码。
下面是MainWindow里面的代码
原理非常简单,就是在页面里面响应外部事件,进而跨页面修改控件或者做点其他事情,有什么不懂的地方,大家可以在下面留言。我看到了会回复
通过委托跨页面修改控件,所谓的原理就是,构造一个可以触发事件A的静态类,然后对页面做出修改的事件B绑定事件A,然后当事件A被触发后,页面里绑定的事件B也被触发响应,于是对页面做出修改。
下面这个图,就是对静态类中的事件A如何触发页面中的事件B,进而跨页面修改界面进行说明的
看了上图想必大家已经明白了。另外进一步的加深了解可以看我自己一个小项目里面的代码。
public enum MainPage//切换页面对应的枚举类型 { PageMain = 1, PageAdmin, } public class PageChangeArgs : EventArgs//委托参数 { private MainPage _currentPage;//这条字段必不可少,因为在构造函数初始化时,属性可能还没有初始化完成,进而造成不可预计的损失 public PageChangeArgs(MainPage page) { this._currentPage = page; } public MainPage CurrentPage//这个属性就是用来在委托间传递数据的 { get { return _currentPage; } set { _currentPage = value; } } } public static class MainWindowsChange { public static event EventHandler<PageChangeArgs> pageChangeEvent;//定义在MainWindowsChange中的一个事件,参数是PageChangeArgs对象 public static void PageChange(MainPage pageValue) { var pageChangeArgs = new PageChangeArgs(pageValue); if (pageChangeEvent != null)//如果MainWindowsChange构造函数中给pageChangeEvent注册了函数就不为null { pageChangeEvent(null, pageChangeArgs);//触发事件,执行所有注册过的函数 } } }
下面是MainWindow里面的代码
public partial class MainWindow : Window { Dictionary<MainPage, Page> pageList; public MainWindow() { InitializeComponent(); frameMain.Content = new PageMain(); pageList = new Dictionary<MainPage, Page> { { MainPage.PageMain, new PageMain() }, { MainPage.PageAdmin, new PageAdmin()}, }; MainWindowsChange.pageChangeEvent += ChangeFramePage; } public void ChangeFramePage(Object sender, PageChangeArgs page) { frameMain.Content = pageList.Single(h=> h.Key == page.CurrentPage).Value; } }
原理非常简单,就是在页面里面响应外部事件,进而跨页面修改控件或者做点其他事情,有什么不懂的地方,大家可以在下面留言。我看到了会回复
相关文章推荐
- WPF中如何在Xaml里通过Trigger修改该其他控件的属性
- WPF之MVVM模式,通过委托两个页面间通信
- wpf 委托 Action 通过线程和委托制作时间控件
- C#通过委托实现线程修改控件值
- WPF中如何在Xaml里通过Trigger修改该其他控件的属性
- 界面控件委托方式 wpf
- c# wpf 通过线程和委托制作时间控件
- 制作login.jsp页面,要求实现提供用户登陆的界面, 用户通过该界面输入用户名(控件名userName)和密码(控件名password), 然后点击“登录”按钮实现登陆操作.
- 灵活修改页面控件
- VS2003 C#:重写键盘响应事件、动态创建控件、创建线程、在线程中使用委托在界面显示数据
- jQuery修改指定的页面控件
- 窗体界面控件源码解析
- ASP.NET 页面控件遍历实现(转载+修改)
- ★ .Net2.0中通过委托和事件进行线程安全的控件访问
- C# 面试题解析-请遍历页面上所有的TextBox控件并给它赋值为string.Empty
- WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽等
- Hook API相关技术以及例子,Hook API的原理其实是通过核心函数强制修改原API的头部指针
- WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽等(进阶)
- WPF中使用Style设置界面控件外观属性
- DNS服务器工作原理完全解析