zoukankan      html  css  js  c++  java
  • 星空雅梦

    WPF通过委托跨页面修改界面控件,并传值原理完全解析

     版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongsking/article/details/54021194

    网上有很多讲WPF修改控件的,但是大部分都只是代码占据了很大的篇幅,没有详细讲解过程。所以有了我这篇文章。我希望每一个看到这篇文章的朋友都可以看懂,另外不要被太长的标题吓到。

    通过委托跨页面修改控件,所谓的原理就是,构造一个可以触发事件A的静态类,然后对页面做出修改的事件B绑定事件A,然后当事件A被触发后,页面里绑定的事件B也被触发响应,于是对页面做出修改。

    下面这个图,就是对静态类中的事件A如何触发页面中的事件B,进而跨页面修改界面进行说明的

    看了上图想必大家已经明白了。另外进一步的加深了解可以看我自己一个小项目里面的代码。

    1.  
      public enum MainPage//切换页面对应的枚举类型
    2.  
      {
    3.  
      PageMain = 1,
    4.  
      PageAdmin,
    5.  
      }
    6.  
      public class PageChangeArgs : EventArgs//委托参数
    7.  
      {
    8.  
      private MainPage _currentPage;//这条字段必不可少,因为在构造函数初始化时,属性可能还没有初始化完成,进而造成不可预计的损失
    9.  
      public PageChangeArgs(MainPage page)
    10.  
      {
    11.  
      this._currentPage = page;
    12.  
      }
    13.  
       
    14.  
      public MainPage CurrentPage//这个属性就是用来在委托间传递数据的
    15.  
      {
    16.  
      get { return _currentPage; }
    17.  
      set { _currentPage = value; }
    18.  
      }
    19.  
       
    20.  
      }
    21.  
      public static class MainWindowsChange
    22.  
      {
    23.  
      public static event EventHandler<PageChangeArgs> pageChangeEvent;//定义在MainWindowsChange中的一个事件,参数是PageChangeArgs对象
    24.  
       
    25.  
      public static void PageChange(MainPage pageValue)
    26.  
      {
    27.  
      var pageChangeArgs = new PageChangeArgs(pageValue);
    28.  
      if (pageChangeEvent != null)//如果MainWindowsChange构造函数中给pageChangeEvent注册了函数就不为null
    29.  
      {
    30.  
      pageChangeEvent(null, pageChangeArgs);//触发事件,执行所有注册过的函数
    31.  
      }
    32.  
      }
    33.  
      }


    下面是MainWindow里面的代码

    1.  
      public partial class MainWindow : Window
    2.  
      {
    3.  
      Dictionary<MainPage, Page> pageList;
    4.  
      public MainWindow()
    5.  
      {
    6.  
      InitializeComponent();
    7.  
      frameMain.Content = new PageMain();
    8.  
       
    9.  
      pageList = new Dictionary<MainPage, Page>
    10.  
      {
    11.  
      { MainPage.PageMain, new PageMain() },
    12.  
      { MainPage.PageAdmin, new PageAdmin()},
    13.  
      };
    14.  
       
    15.  
      MainWindowsChange.pageChangeEvent += ChangeFramePage;
    16.  
      }
    17.  
      public void ChangeFramePage(Object sender, PageChangeArgs page)
    18.  
      {
    19.  
      frameMain.Content = pageList.Single(h=> h.Key == page.CurrentPage).Value;
    20.  
      }
    21.  
      }

    原理非常简单,就是在页面里面响应外部事件,进而跨页面修改控件或者做点其他事情,有什么不懂的地方,大家可以在下面留言。我看到了会回复
  • 相关阅读:
    flash中网页跳转总结
    as3自定义事件
    mouseChildren启示
    flash拖动条移出flash无法拖动
    需要一个策略文件,但在加载此媒体时未设置checkPolicyFile标志
    Teach Yourself SQL in 10 Minutes
    电子书本地转换软件 Calibre
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes – Page 31 练习
  • 原文地址:https://www.cnblogs.com/LiZhongZhongY/p/10884916.html
Copyright © 2011-2022 走看看