Wpf Prism中添加新控件的区域适配器

news/2024/12/21 20:03:11/文章来源:https://www.cnblogs.com/kitthe/p/18621107

上节中我们讲了怎么样定义一个区域与区域引用视图,但并不是所有的组件都支持组件当作区域使用,比如StackPanel就不支持当作区域来使用:

我们自接使用会报以下错误,这时候我们就要自定义一个区域适配器:

 1.首先我们创建一个StackPanelRegionAdapter的类:

 1 using Prism.Regions;
 2 using System.Windows;
 3 using System.Windows.Controls;
 4 
 5 namespace MyTest
 6 {
 7     public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
 8     {
 9         public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
10             : base(regionBehaviorFactory)
11         {
12         }
13 
14         protected override void Adapt(IRegion region, StackPanel regionTarget)
15         {
16             region.Views.CollectionChanged += (s, e) => 
17             {
18                if (e.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add)
19                 {
20                     foreach (FrameworkElement view in e.NewItems) 
21                         {
22                         regionTarget.Children.Add(view);
23                         }
24                 }
25             };
26         }
27 
28         protected override IRegion CreateRegion()
29         {
30             return new Region();
31         }
32     }
33 }
View Code

2.修改MainWindow.xaml为StackPanel作为Region的容器:

 3.我们需要在app中注册定义的StackPanelRegionAdapter

 1 using Prism.Ioc;
 2 using Prism.Regions;
 3 using System.Windows;
 4 using System.Windows.Controls;
 5 
 6 namespace MyTest
 7 {
 8     /// <summary>
 9     /// Interaction logic for App.xaml
10     /// </summary>
11     public partial class App
12     {
13         protected override Window CreateShell()
14         {
15             return Container.Resolve<MainWindow>();
16         }
17 
18         protected override void RegisterTypes(IContainerRegistry containerRegistry)
19         {
20 
21         }
22         protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
23         {
24             base.ConfigureRegionAdapterMappings(regionAdapterMappings);
25             regionAdapterMappings.RegisterMapping(typeof(StackPanel)
26                 , Container.Resolve<StackPanelRegionAdapter>());
27 
28         }
29     }   
30 }
View Code

4.修改MainWindowViewModel中绑定的名字:

 1 using Prism.Mvvm;
 2 using Prism.Regions;
 3 
 4 namespace MyTest
 5 {
 6     public class MainWindowViewModel:BindableBase
 7     {
 8 
 9         private string _title = "hello";
10         public string Title
11         {
12             get { return _title; }
13             set { SetProperty(ref _title, value); }
14         }
15 
16         private readonly IRegionManager regionManager;
17         
18 
19         public MainWindowViewModel(IRegionManager regionManager) 
20         {
21             this.regionManager = regionManager;
22             regionManager.RegisterViewWithRegion("stackRegion", typeof(ViewA));
23 
24         }        
25 
26     }
27 }  
View Code

启动项目,我们就可以将StackPanel作为容器使用了:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856506.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】大模型时代的具身智能2024报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=38597 在当今科技飞速发展的时代,大模型的崛起如同一股强劲的浪潮,席卷了整个科技领域,而具身智能则在这浪潮中崭露头角,成为人工智能领域备受瞩目的前沿方向。随着数据的海量增长与计算能力的迅猛提升,大模型为具身智能注入了强大的智慧…

【数据库开发】小红书MySQL数据一致性校验能力探索与实践

原创 等你加入的 小红书技术REDtech 2024年12月19日 17:01 北京 图片 本文主要介绍数据一致性校验如何结合小红书的业务进行实践并落地,以及数据一致性校验在小红书内部拿到的实际收益。 如有感兴趣的同学,欢迎联系我们开展技术交流。 一、背景 1.1 什么是数据一致性校验 在数…

【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=38564 本年度,国家及地方政府持续发力,推出诸多政策组合拳,全力推动汽车产业向更高质量转型升级,积极鼓励消费升级,并大力推行以旧换新等惠民生、促发展举措。尤为引人注目的是,在新能源汽车领域,补贴力度空前提升,在原有税费减免政策…

2024 EC Final 前集训记录

ECF23 Link C. Equal Sums 记值域为 \(w\) 并认为 \(n,m\) 同阶,直接背包的话和的值域能够达到 \(O(nw)\),统计每个答案的复杂度也是 \(O(nw)\),于是总复杂度是 \(O(n^3w)\)。 注意到最后需要维护的信息仅仅是 \(\sum x_i = \sum y_j \Leftrightarrow \sum x_i - \sum y_j =…

Wpf加入Prism框架

Prism是一个开源框架,用于在WPF、Xamarin Forms、Uno/Win UI等应用中创建松耦合、可维护、可测试的XAML应用程序。 Prism提供了一组设计模式的实现,这些设计模式有助于编写结构良好且可维护的XAML应用程序 ,包括MVVM,dependency injection,commands,EventAggregator等。1…

【甲方安全】工业行业+工业无线网络技术

摘 要 工业互联网体系融合了新一代信息通信技术与工业经济,推动了工业数字化、网络化、智能化转型,其中网络体系是基础。工业无线网络作为其重要组成部分,具有灵活部署的特性,能适应复杂的工业环境,为工业互联网的构建提供基础。深入探讨了工业无线网络技术在工业互联网中…

AutoCAD VBA 模态窗口焦点丢失的终极解决办法

话不多说上代码 问题出在userform这个窗体的样式上需要用到的win32api函数以及常量Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Public Const…

数值计算方法(1) 插值方法

+++ date = 2024-12-21T10:12:41+08:00 draft = true title = 数值计算方法(1) 插值方法 +++ 初次发布于我的个人文档 之前有一期简单介绍了一下拉格朗日插值和数值积分微分方法,我感觉有点太简单了。所以这次打算开个系列,好好唠一唠。 什么是插值 在小学阶段,有一种题目叫…

Antdesign React之API展示页面

本项目基于antdesignpro,点击调试后跳转弹窗,左边展示public/doc路径下的md文档并且通过markdownview渲染成md,右侧是json编辑器index.tsx import React, { useState, useMemo } from react; import { Layout, Menu, theme, Row, Col } from antd; import { HomeOutlined, F…

时间复杂度:理解算法性能的核心指标

在编程和算法设计中,时间复杂度是一个至关重要的概念。它用来衡量一个算法在处理不同规模的输入数据时,执行所需要的时间增长速度。换句话说,时间复杂度能够帮助我们理解算法在面对大数据时的表现,是否能高效地完成任务。 什么是时间复杂度? 时间复杂度是一个描述算法效率…

TIA环境下SCL编程练习:产生m到n之间的随机整数,存入数组

假设需要读取100个随机数,存入有100个成员的数组。做这个练习是为了学习一下SCL编程。随机数使用系统时钟纳秒数来线性转换。 新建项目,选用1500PLC(6ES7 513-1AL02-0AB0,当然可以选用其它型号),设定本地时区,建立网络。 新建DB,建立变量,取消优化块的访问。 新建FC,…

大学微积分 AB 第六单元:变革的整合与积累(定积分、黎曼近似)

积分学简介 定积分简介 例子: 示例:变化的积累 1/2是面积的一半 例子: