自定义ChildWindow,完美实现同时弹出多个自定义的窗口

针对Sl中自带的ChildWindow不能同时弹出两个甚至更多,我们开发了自己的ChildWindow,解决类似的障碍。

 

效果:

获取 Microsoft Silverlight

xaml:

 

< UserControl  x:Class ="SlChindWindow.scSelfControl"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"  Width ="592"  Height ="511"  MouseLeftButtonDown ="UserControl_MouseLeftButtonDown"     >
     < Canvas  Name ="Carrier" >
         < Canvas  Height ="43"  Name ="Head"  Width ="592"  MouseLeftButtonDown ="Head_MouseLeftButtonDown"  MouseMove ="Head_MouseMove"  MouseLeftButtonUp ="Head_MouseLeftButtonUp" >
             < Image  Canvas.Left ="554"  Canvas.Top ="2"  Height ="16"  Name ="btnClose"  Width ="35"  Source ="/SlChindWindow;component/Images/close.jpg"  MouseLeftButtonDown ="btnClose_MouseLeftButtonDown" />
         </ Canvas >
         < Canvas  Height ="468"  Name ="Body"  Width ="592" >
             < Image  Height ="12"  Name ="Resizer"  Width ="10"  Source ="/SlChindWindow;component/Images/resizer.jpg"  Canvas.Left ="582"  Canvas.Top ="499"  MouseLeftButtonDown ="Resizer_MouseLeftButtonDown"  MouseLeftButtonUp ="Resizer_MouseLeftButtonUp"  MouseMove ="Resizer_MouseMove"   />
         </ Canvas >
     </ Canvas >
</ UserControl >

对应的后台文件:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;

namespace SlChindWindow
{
     public  partial  class scSelfControl : UserControl
    {
         bool isMouseCaptured  =  false;

        Point clickPoint =  new Point();

         public scSelfControl()
        {
            InitializeComponent();
            InitControl();
        }

         private  void InitControl()
        {
            Image HeadBg =  new Image();
            HeadBg.Source =  new BitmapImage( new Uri( @" /Images/head.jpg ", UriKind.Relative));
            HeadBg.Width =  592;
            HeadBg.Height =  43;
            Canvas.SetLeft(HeadBg,  0);
            Canvas.SetTop(HeadBg,  0);
            Canvas.SetZIndex(HeadBg, - 1);
            Head.Children.Add(HeadBg);

            Image BodyBg =  new Image();
            BodyBg.Source =  new BitmapImage( new Uri( @" /Images/body.jpg ", UriKind.Relative));
            BodyBg.Width =  592;
            BodyBg.Height =  468;
            Canvas.SetLeft(BodyBg,  0);
            Canvas.SetTop(BodyBg,  43);
            Canvas.SetZIndex(BodyBg, - 1);
            Body.Children.Add(BodyBg);

        }

         private  void Head_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
        {
            Head.CaptureMouse();
            isMouseCaptured =  true;
            clickPoint = e.GetPosition(sender  as UIElement);
        }

         private  void Head_MouseMove( object sender, MouseEventArgs e)
        {
             if (isMouseCaptured)
            {
                 if (Application.Current !=  null && Application.Current.RootVisual !=  null &&
                    (e.GetPosition(Application.Current.RootVisual).X <  0 || e.GetPosition(Application.Current.RootVisual).Y <  0))
                {
                     return; // 如果超出Silverlight的内容区,则直接返回
                }

                TransformGroup transformGroup =  this.RenderTransform  as TransformGroup;

                 if (transformGroup ==  null)
                {
                    transformGroup =  new TransformGroup();
                }

                TranslateTransform t =  new TranslateTransform()
                {
                    X = e.GetPosition( this).X -  this.clickPoint.X,
                    Y = e.GetPosition( this).Y -  this.clickPoint.Y
                };

                 if (transformGroup !=  null)
                {
                    transformGroup.Children.Add(t);
                     this.RenderTransform = transformGroup;
                }
                
            }
        }

         private  void Head_MouseLeftButtonUp( object sender, MouseButtonEventArgs e)
        {
            Head.ReleaseMouseCapture();
            isMouseCaptured =  false;
        }

         static  int z;

         private  void UserControl_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
        {
            z++;
            Canvas.SetZIndex( this, z);
        }

         ///   <summary>
        
///  关闭
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private  void btnClose_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
        {
            Canvas Container =  this.Parent  as Canvas;
            Container.Children.Remove( this);
        }

         private  void Resizer_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
        {
            Resizer.CaptureMouse();
            isMouseCaptured =  true;
            clickPoint = e.GetPosition(sender  as UIElement);
        }

         private  void Resizer_MouseLeftButtonUp( object sender, MouseButtonEventArgs e)
        {
            Resizer.ReleaseMouseCapture();
            isMouseCaptured =  false;
        }

         private  void Resizer_MouseMove( object sender, MouseEventArgs e)
        {
             if (isMouseCaptured)
            {
                 if (Application.Current !=  null && Application.Current.RootVisual !=  null &&
                    (e.GetPosition(Application.Current.RootVisual).X <  0 || e.GetPosition(Application.Current.RootVisual).Y <  0))
                {
                     return; // 如果超出Silverlight的内容区,则直接返回
                }

                TransformGroup transformGroup =  this.RenderTransform  as TransformGroup;
                 if (transformGroup ==  null)
                {
                    transformGroup =  new TransformGroup();
                }
                ScaleTransform t =  new ScaleTransform()
                {
                    ScaleX = (e.GetPosition( this).X -  this.clickPoint.X)/ this.Width, // 获得放大或缩小的倍率
                    ScaleY = (e.GetPosition( this).Y -  this.clickPoint.Y) /  this.Height
                };
                 if (transformGroup !=  null)
                {
                    transformGroup.Children.Add(t);
                     this.RenderTransform = transformGroup;
                }

                
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/Caceolod/archive/2011/11/23/2260100.html

前端跨标签页通信:从LocalStorage到Broadcast Channel的实战指南 在现代Web开发中,实现不同浏览器标签页间的数据同步与通信是提升应用体验的关键技术。其核心原理在于利用浏览器提供的同源策略下的共享存储或消息传递机制,让隔离的页面上下文能够安全地交换信息。这项技术的核心价值在于保障多页面应用的数据一致性、实现实时状态同步,并最终提升用户的交互体验。常见的应用场景包括中后台管理系统的表单与列表联动、在线协作文档的实时编辑、以及电商网站中购物车状态的全局更新等。本文聚焦于前端同源场景,深入解析了以LocalStorage事件和Broadcast Channel API为代表的多 阅读详情

相关推荐

Windows后台进程解析:Runtime Broker与Background Task Host

Windows操作系统中的后台进程Runtime Broker和Background Task Host是UWP应用架构的核心组件。Runtime Broker作为权限管理器,通过沙箱机制控制应用对系统资源的访问,确保安全性;Background Task Host则负责智能调度后台任务,优化系统资源使用。这些机制显著提升了Windows的稳定性和效率,尤其在UWP应用和后台任务管理方面表现突出。了解它们的工作原理和优化方法,可以帮助用户更好地管理系统性能,解决常见的CPU和内存占用问题。

weixin_30571465的博客 362

Vue - 详细完美解决 ElementUI MessageBox “多次“ 弹框问题,让其无论执行多少次都只弹出来一次(常见于请求拦截器多次触发弹框,导致弹出来很多个)详细示例代码,保证完美解决!

vue如何防止ElementUIMessageBox多次弹框,vueelement弹框弹出来很多次怎么办,elementvueMessageBox解决执行多次后出现多次弹框的问题,elementUI如何阻止MessageBox多次弹出来,vue+element解决多个请求同时报错,弹出多个消息框message,饿了么组件库MessageBox弹框频繁弹出解决方法,vue调用MessageBox出现多次弹框,vueelementMessageBox怎么只弹出一次,vue之axios请求

🏆 前端领域优质创作者 8166

PyWinAuto 自动化(一)

pywinauto 使用思路及每步操作

wchao190的博客 2178

Vue3多个弹窗同时出现解决思路

Vue3多个弹窗同时出现解决思路:弹窗或者说对话框是我们在开发系统或者页面很常用的元素,所以博主想对出现多个弹窗的情况下的解决思路进行一个整理

海风依旧 7005

通过for循环出来的element-ui中dialog弹框会叠加多次的解决方法

前提是已经引入了vue.js, element-ui.js,element-ui.css <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script src="https://unpk

qq_57540936的博客 3712

element多个弹窗层级问题

问题: 我想让抽屉在最上面,但是被遮罩挡住了 解决: <!-- 新建编辑流量分层页面抽屉 --> <el-drawer title="策略管理" :append-to-body="true" :visible.sync="flowDrawerFlag" :before-close="closeDrawer" direction="rtl" custom-class="ad-drawer"

Haines 5108

elementUI弹框form多元素表单问题 - 抛砖篇

疑问1:elementUI的这个MessageBox弹框能否添加多个表单元素? 疑问2:如果能添加多个,怎么添加? 疑问3:使用el-dialog组件如何调用? 通过上述实践,总结发现还是使用el-dialog组件,比较坑少,直接,出效率! 而且该组件还支持: 嵌套 Dialog 的场景,能有效避免 遮罩层级的样式 bug ~~ 正常情况下,我们不建议使用嵌套的 Dialog, 如果需要...

草巾冒小子的博客 7452

WPF/Silverlight深度解决方案:(十三)完美自定义ChildWindow

ChildWindow在所有应用领域中都是必不可缺的好工具,小到一个弹出的确认对话框;大到包含众多复杂参数、选项及数据列表的资源窗口,都可以通过它来分类实现ChildWindow的好处是可以实现拖动及伸缩达到随意布局,更高级的同样可以实现类似最大化、最小化等高级布局功能。目前Silverlight3.0中自带的ChildWindow感觉仅仅是作为一个富Dialog的范畴应用,我们可以通过在项

3403

完美自定义ChildWindow

文档下载:http://www.ctdisk.com/file/1758325 ChildWindow在所有应用领域中都是必不可缺的好工具,小到一个弹出的确认对话框;大到包含众多复杂参数、选项及数据列表的资源窗口,都可以通过它来分类实现ChildWindow的好处是可以实现

ahoal的专栏 1420

post-robot序列化机制深度解析:支持哪些数据类型传输?

想要在不同域名的窗口之间安全地传输复杂数据吗?post-robot的**序列化机制**为您提供了完美的解决方案!🎯 这个强大的跨域通信库不仅支持基本的JSON数据类型,还能传输函数、Promise、错误对象等复杂JavaScript对象。本文将为您深度解析post-robot的序列化能力,让您了解如何在不同窗口间无缝传输各种数据类型。 ## 🔍 为什么需要跨域数据序列化? 在Web开发中,

gitblog_00042的博客 521

Python自动化:pywinauto的简单使用

pywinauto是一个基于Python的Windows应用程序自动化控制库。它支持模拟鼠标和键盘操作,实现对Windows应用程序的自动化控制。通过使用pywinauto,你可以轻松实现自动登录Windows系统、自动打开和关闭应用程序、自动填写表单等操作。pywinauto作为Python自动化控制库的一员,具有简单易用、功能强大的特点。通过本文的介绍,相信你已经对pywinauto有了一定的了解和认识。在未来的学习和工作中,充分发挥pywinauto的优势,提高工作效率,实现更高级别的自动化控制。

计算机网络1微尘 3292

PyWinAuto自动化实战

纸上得来终觉浅,学习任何技术都得上手练习,我也是在实战的过程遇到很多坑,例如:在钉钉筛选聊天记录过程中,选择发送人,这个弹窗使用好几种方式获取不到,各种打印调试,搞到晚上1点多,最后用了最原始的方法,其实就是简单的问题复杂化了。今天这个实战很简单:1、进入钉钉,2、搜索聊天群,3、打开聊天记录,4、选择指定的发送消息的人,5、获取聊天信息并过滤数据。最后附上完整的代码。最后获取聊天信息,搜索完组员后,窗口结构发生了变化,要重新获取窗口信息,然后获取所有 Text 类型的控件文本,这里面保存的就是聊天信息。

wchao190的博客 1975

微信定时消息发送,pywinauto自动化神器!

随着社交媒体的普及,微信已经成为人们日常沟通的主要工具之一。然而,在某些情况下,我们可能需要自动发送消息来提高工作效率。这时候,我们可以借助pywinauto自动化工具来实现这一功能。

计算机网络1微尘 4686

7.Prism框架之对话框服务

Dialog通常是一种特殊类型的窗口,用于和用户进行交互,一般是用来从用户那里接收数据,显示信息,或者是允许用户执行特定任务.窗口分为两种一种是模态窗口(),一种是非模态窗口(模态窗口模态窗口就是阻止和其他的控件进行交互的窗口,必须是处理完这个窗口之后,才能和其他的窗口进行交互,这个窗口脚模态窗口.一般用于比较重要的交互,比如保存文件,确认删除等.传统显示的是时候使用,有返回值.非模态窗口

Fioman_GYM的博客 3402

Pywinauto实战:Python自动化操作Windows GUI应用的核心原理与避坑指南

GUI自动化是软件测试和流程自动化领域的关键技术,它通过模拟用户操作来实现对图形界面应用的自动控制。其核心原理在于与操作系统的底层API或自动化框架进行交互,从而识别和操控窗口、按钮、文本框等界面元素。这项技术的价值在于能够将人力从重复、繁琐的桌面操作中解放出来,大幅提升工作效率和准确性,广泛应用于自动化测试、数据录入、运维监控和日常办公自动化等场景。在Windows平台上,Pywinauto库凭借其强大的控件识别能力和灵活的脚本编写方式,成为实现桌面自动化的利器。它通过封装Win32 API和Micros

weixin_30514745的博客 360
上一篇: 关于图片蒙板的使用方法
下一篇: 关于一些Silverlight中常用的尺寸,慢慢记录
ding6720
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值