按钮

WPF 中的 loaded 事件和 Initialized 事件

荒凉一梦 提交于 2019-12-09 03:28:33
在 WPF 中, 控件有 Loaded 和 Initialized 两种事件. 初始化和加载控件几乎同时发生, 因此这两个事件也几乎同时触发. 但是他们之间有微妙且重要的区别. 这些区别很容易让人误解. 这里介绍我们设计这些事件的背景. (不仅适用于 Control 类, 同样在通用类如 FrameworkElement 和 FrameworkContentElement 类也适用.) 下面是个小故事: Initialized 事件只说: 这个元素已经被构建出来,并且它的属性值都被设置好了,所以通常都是子元素先于父元素触发这个事件.当一个元素的 Initialized 事件被触发, 通常它的子树都已经初始化完成, 但是父元素还未初始化. 这个事件通常是在子树的 Xaml 被加载进来后触发的. 这个事件与 IsInitialized 属性相互绑定. Loaded 事件说: 这个元素不仅被构造并初始化完成,布局也运行完毕,数据也绑上来了,它现在连到了渲染面上(rendering surface),秒秒钟就要被渲染的节奏.到这个时候,就可以通过 Loaded 事件从根元素开始画出整棵树. 这个事件与 IsLoaded 属性绑定. 如果你不确定该用哪个事件, 而且也不想继续读下去, 那就用 Loaded 事件好了, 通常它都是对的. 然后, 就是整个故事了. Initialized 事件

C# WPF 动态添加窗体

可紊 提交于 2019-12-09 03:28:13
WPF窗口采用默认的Grid布局控件,需要添加其“Name”值为“grid_test”,在grid_test添加按钮和点击响应,代码如下: Button button_day = new Button(); button_day.Height = window_height; button_day.Width = window_width; button_day.HorizontalAlignment = HorizontalAlignment.Left; button_day.VerticalAlignment = VerticalAlignment.Top; button_day.BorderThickness = new Thickness(0,0,0,0); button_day.Background = this.Background; button_day.Margin = new Thickness(10,10, 0, 0); button_day.Content = "test"; button_day.Name = "button_day"; button_day.Click += new RoutedEventHandler(button_day_click); grid_test.Children.Add(window_button_temp.window

C#如何弹出输入框

◇◆丶佛笑我妖孽 提交于 2019-12-09 03:26:26
在C#中,进行windows窗体应用程序编程的时候,经常需要弹出输入框,输入密码,输入文本之类的。然而,C#中没有直接弹出输入框的语句,MessageBox只能显示一段消息而不能输入。我们需要调用Microsoft.VisualBasic.Dll,使用VB中的inputbox,实现弹出输入框的功能。 菜单栏,选择【项目】;然后在弹出的菜单中选择【添加引用】 弹出“添加引用”的窗口,找到名称为Microsoft.VisualBasic的组件,选择它并点击【确定】 使用命名空间Microsoft.VisualBasic。添加代码:using Microsoft.VisualBasic; 在窗体中添加一个Button和label。我们要实现点击button,用label显示输入的文本的内容。 调用VB中的InputBox,输入一串字符串。给button添加代码:string str=Interaction .InputBox ("请输入字符串","字符串","",100,100). Interaction .InputBox的格式:string Interaction .InputBox(string Prompt,string title,string Defaultresponce,int Xpos,int Ypose) 让标签label显示输入的内容。(也可进行密码检验之类的)

[转]WPF绘制自定义窗口

≡放荡痞女 提交于 2019-12-09 03:17:47
摘自: http://www.cnblogs.com/hiyz/archive/2012/07/07/2580315.html WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角 自定义标题栏及按钮 自定义状态栏 窗体的半透明效果 窗体4周有一圈半透明阴影(抓的图上看不出来) 实现思路很简单,首先隐藏默认窗口的标题栏和边框,然后用WPF的Border或Canvas等元素模拟定义窗体的标题栏、内容区和状态栏。 具体实现如下: 第一步: 定义义个窗口基类,继承自Window,在构造函数中加载自定义窗口的样式文件,代码如下: public partial class WindowBase:Window { InitializeTheme(); } private void InitializeTheme() { string themeName = ConfigManage.CurrentTheme; // 样式所在的文件夹 App.Current.Resources.MergedDictionaries.Add(Application.LoadComponent( new Uri( string .Format( " ../Theme/{0}/WindowBaseStyle.xaml " ,

Vue 基础 day01

谁都会走 提交于 2019-12-09 00:31:41
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Weex) Vue.js 是前端的 主流框架之一 ,和Angular.js、React.js 一起,并成为前端三大主流框架! Vue.js 是一套构建用户界面的框架, 只关注视图层 ,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三方类库,可以整合起来做大型项目的开发) 前端的主要工作?主要负责MVC中的V这一层;主要工作就是和界面打交道,来制作前端页面效果; 为什么要学习流行框架 1, 企业为了提高开发效率:在企业中,时间就是效率,效率就是金钱; 企业中,使用框架,能够提高开发的效率; 2, 提高开发效率的发展历程:原生JS -> Jquery之类的类库 -> 前端模板引擎 -> Angular.js / Vue.js(能够帮助我们减少不必要的DOM操作;提高渲染效率;双向数据绑定的概念【通过框架提供的指令,我们前端程序员只需要关心数据的业务逻辑,不再关心DOM是如何渲染的了】)在Vue中,一个核心的概念,就是让用户不再操作DOM元素,解放了用户的双手,让程序员可以更多的时间去关注业务逻辑; 3, 增强自己就业时候的竞争力; 人无我有,人有我优; 你平时不忙的时候

《深入浅出WPF》学习总结之控件与布局

邮差的信 提交于 2019-12-09 00:08:33
一、控件到底是什么   控件的本质是“数据+算法”——用户输入原始数据,算法处理原始数据并得到结果数据。问题就在于程序如何将结果数据展示给用户。同样一组数据,你可以使用LED阵列显示出来,或者是以命令行模式借助各种控制字符(如Tab)对其并输出,但这些都不如图形化用户界面(Graphics User Interface ,GUI)来的友好和方便。GUI是程序界的优胜者,但在Windows上实现图形化界面有很多中方法。每种方法又拥有自己的一套开发理念和工具。每种GUI开发与它的里理念和工具共同组成一种方法论。常见的有: Windows API (Win API):调用Windows底层绘图函数,使用C语言,最原始也最基础。 Microsoft Foundation Class(MFC):使用C++语法将原始的Win32 API封装成控件类。 Visual Component Library(VCL):Delphi 和C++Builder使用的与MFC相近的控件类库 Vistal Basic+ActiveX控件(VB6):使用组件化的思想把Win API 封装成UI控件,已其多语言共用 Java Swing/AWT:Java SDK中用于跨平台开发GUI程序的控件类库 Windows Form:.NET平台上进行GUI开发的老牌劲旅,完全组件化但需要.NET运行时支持。 Windows

React Hook

你说的曾经没有我的故事 提交于 2019-12-08 23:31:25
import React, {useState, useEffect} from 'react'; function Example() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Clickkk </button> </div> ); } export default Example    import React, { useState } from 'react' const LoginControl = (props) => { const [flag, setFlag] = useState(false) const [cnt, setCnt] = useState(0) const changeState = () => { setFlag(state => { return !state }) setCnt(state => { let newCnt = state newCnt ++ return newCnt

LitElement(六)生命周期

不想你离开。 提交于 2019-12-08 23:07:44
1、概述 基于LitElement的组件通过响应观察到的属性更改而异步更新。 属性更改是分批进行的,如果在请求更新后,更新开始之前,发生更多属性更改,则所有更改都将捕获在同一次更新中。 在较高级别上,更新生命周期为: 一个属性被设置 检查是否需要更新。如果需要更新,发出请求。 执行更新: 通过properties 和 attributes. 渲染元素 resolve 一个 promise ,表示更新已完成 1.1 LitElement和浏览器事件循环 浏览器通过处理事件循环中的任务队列来执行JavaScript代码。在事件循环的每次迭代中,浏览器都从队列中提取任务并将其运行到完成。 任务完成后,在从队列中执行下一个任务之前,浏览器会分配时间来从其他来源(包括DOM更新,用户交互和微任务队列)执行工作。 默认情况下,LitElement更新是异步请求的,并作为微任务排队。这意味着上面的步骤3(执行更新)在事件循环的下一次迭代结束时执行。 您可以更改此行为,以便第3步在执行更新之前等待Promise。有关更多信息,请参见 performUpdate 。 有关浏览器事件循环的更详细说明,请参阅 Jake Archibald的文章 。 1.2 生命周期回调 LitElement还从Web组件标准继承 默认的生命周期回调 : connectedCallback :

第七次作业

浪尽此生 提交于 2019-12-08 17:51:29
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_above="@id/textview" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="手机号码" android:layout_weight="1" /> <EditText android:id="@+id/edittext" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="5" />

第九次作业

隐身守侯 提交于 2019-12-08 17:49:22
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:padding="16dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="130dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓 名:" android:textSize="18sp" /