博客园 - Andrew.Wangxu
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=139398
2014-07-18T07:51:37Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
feed.cnblogs.com
https://www.cnblogs.com/andrew-blog/p/3848891.html
Visual Studio使用技巧,创建自己的代码片段 - Andrew.Wangxu
代码片段的使用示例
在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个
for(int i = 0; i length;i++)
{
}
这样的代码,我们只需要写 for 然后紧接着按2下”Tab键”即可实现上面的代码片段,如果需要编写一个
2014-07-16T08:04:00Z
2014-07-16T08:04:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】代码片段的使用示例
在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个
for(int i = 0; i length;i++)
{
}
这样的代码,我们只需要写 for 然后紧接着按2下”Tab键”即可实现上面的代码片段,如果需要编写一个 <a href="https://www.cnblogs.com/andrew-blog/p/3848891.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3848880.html
使用 MVVMLight 消息通知 - Andrew.Wangxu
在文章的其实我们就说了,MVVMLight的精华就是消息通知机制,设计的非常不错。这个东西在MVVMLight可以说是用的及其的频繁,当 ViewModel请求View要有些改变的时候(比如弹个窗体)那么你在ViewModel里面编写弹窗的代码?那也就违背了MVVM的设计模式 啦,MVVMLight的消息通知可以实现互相调用代码而不耦合!
2014-07-16T08:01:00Z
2014-07-16T08:01:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】在文章的其实我们就说了,MVVMLight的精华就是消息通知机制,设计的非常不错。这个东西在MVVMLight可以说是用的及其的频繁,当 ViewModel请求View要有些改变的时候(比如弹个窗体)那么你在ViewModel里面编写弹窗的代码?那也就违背了MVVM的设计模式 啦,MVVMLight的消息通知可以实现互相调用代码而不耦合! <a href="https://www.cnblogs.com/andrew-blog/p/3848880.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3842254.html
WPF 在事件中绑定命令 - Andrew.Wangxu
其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中。
上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是如何构建使用的还不够,很多情况下我们都需要在某个事件触发的时候才去触发命令,所以将命令绑定到事件上是非常有效的做法,下面我们来接着实现将命令绑定到事件中。
2014-07-14T02:54:00Z
2014-07-14T02:54:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中。
上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是如何构建使用的还不够,很多情况下我们都需要在某个事件触发的时候才去触发命令,所以将命令绑定到事件上是非常有效的做法,下面我们来接着实现将命令绑定到事件中。 <a href="https://www.cnblogs.com/andrew-blog/p/3842254.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3842250.html
使用 MVVMLight 命令绑定 - Andrew.Wangxu
首先,如果您希望了解更多的MVVMLight技术或希望有顺序的学习MVVMLight,请查阅目录《MVVMLight 设计模式系列使用文章》。
继上一篇文章的项目,我们实现了数据绑定到界面中。这篇文章我们将实现把命令绑定到按钮上,在XAML中的Button之类的都会有个Command属性可以让我们来绑定命令使用。
首先我们要实现的目标是,在界面中可以点击按钮添加数据,但是最多能添加5条数据,最少保证有1条数据。也就是两个按钮哈(增加数据/删除数据)。界面如下:
2014-07-14T02:53:00Z
2014-07-14T02:53:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】首先,如果您希望了解更多的MVVMLight技术或希望有顺序的学习MVVMLight,请查阅目录《MVVMLight 设计模式系列使用文章》。
继上一篇文章的项目,我们实现了数据绑定到界面中。这篇文章我们将实现把命令绑定到按钮上,在XAML中的Button之类的都会有个Command属性可以让我们来绑定命令使用。
首先我们要实现的目标是,在界面中可以点击按钮添加数据,但是最多能添加5条数据,最少保证有1条数据。也就是两个按钮哈(增加数据/删除数据)。界面如下: <a href="https://www.cnblogs.com/andrew-blog/p/3842250.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3842247.html
使用 MVVMLight 绑定数据 - Andrew.Wangxu
如果你还不知道如何在VS中加入MVVMLight的引用,那么建议你先翻阅这篇文章:在VS中安装/使用 MVVMLight
这篇文章主要是介绍如何使用MVVMLight来绑定数据到界面中(View),以此来了解MVVMLight的一些基础的类的用法。
文章底部会提供本示例的源码下载。
2014-07-14T02:52:00Z
2014-07-14T02:52:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】如果你还不知道如何在VS中加入MVVMLight的引用,那么建议你先翻阅这篇文章:在VS中安装/使用 MVVMLight
这篇文章主要是介绍如何使用MVVMLight来绑定数据到界面中(View),以此来了解MVVMLight的一些基础的类的用法。
文章底部会提供本示例的源码下载。 <a href="https://www.cnblogs.com/andrew-blog/p/3842247.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3842244.html
在VS中安装/使用 MVVMLight - Andrew.Wangxu
一般来说,我喜欢使用NuGet来获取这些东西,比如Newtonsoft.Json、netlog4、MVVMLight 之类的东西。至于NuGet的使用,以后再说吧。为了直接进入正题,我们这里直接使用VS中的“扩展和更新”来安装MVVMLight组件。
我使用的是VS2013,其他版本的操作也基本上一样。接下来我们将安装MVVMLight到VS中。
安装 MVVMLight Toolkit
为什么说是 MVVMLight Toolkit ?实际上我们一般安装的都是 MVVMLight Toolkit ,这个里面包含了工具就是在VS新建工程的时候你会看见有MVVMLight的模板(而使用 NuGet 来直接引用MVVMLight 则没有这些模板之类的东西,比较干净。),其实两个都是同一个东西,只是一个有工程模板,另一个则是仅仅对MVVMLight相关文件的引用。
2014-07-14T02:51:00Z
2014-07-14T02:51:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】一般来说,我喜欢使用NuGet来获取这些东西,比如Newtonsoft.Json、netlog4、MVVMLight 之类的东西。至于NuGet的使用,以后再说吧。为了直接进入正题,我们这里直接使用VS中的“扩展和更新”来安装MVVMLight组件。
我使用的是VS2013,其他版本的操作也基本上一样。接下来我们将安装MVVMLight到VS中。
安装 MVVMLight Toolkit
为什么说是 MVVMLight Toolkit ?实际上我们一般安装的都是 MVVMLight Toolkit ,这个里面包含了工具就是在VS新建工程的时候你会看见有MVVMLight的模板(而使用 NuGet 来直接引用MVVMLight 则没有这些模板之类的东西,比较干净。),其实两个都是同一个东西,只是一个有工程模板,另一个则是仅仅对MVVMLight相关文件的引用。 <a href="https://www.cnblogs.com/andrew-blog/p/3842244.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/3842240.html
关于 MVVMLight 设计模式系列 - Andrew.Wangxu
MVVM设计模式你可以在WPF、Silverlight、Windows Phone开发中使用,我想至今已经有非常非常多的朋友正在使用MVVM设计模式,尤其是MVVMLight 。
本系列文章以WPF举例,似乎在百度上如果你要查找MVVM相关的某个知识点,难点,给我的感觉资料是比较少的。本篇文章是一个目录导航,我会在最 近一段时间把相关的MVVMLight的知识与技巧发布在我的博客中,并在本文中以目录的方式呈现。希望能为业界贡献一份微薄之力,帮助到正在看此文的 你。
有不足之处还望各位Coder们指导纠正,同时欢迎补充 or 投稿MVVMlight系列的文章。
2014-07-14T02:49:00Z
2014-07-14T02:49:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】MVVM设计模式你可以在WPF、Silverlight、Windows Phone开发中使用,我想至今已经有非常非常多的朋友正在使用MVVM设计模式,尤其是MVVMLight 。
本系列文章以WPF举例,似乎在百度上如果你要查找MVVM相关的某个知识点,难点,给我的感觉资料是比较少的。本篇文章是一个目录导航,我会在最 近一段时间把相关的MVVMLight的知识与技巧发布在我的博客中,并在本文中以目录的方式呈现。希望能为业界贡献一份微薄之力,帮助到正在看此文的 你。
有不足之处还望各位Coder们指导纠正,同时欢迎补充 or 投稿MVVMlight系列的文章。 <a href="https://www.cnblogs.com/andrew-blog/p/3842240.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/DoBox_1.html
DoBox 下载 - Andrew.Wangxu
一款简单十分好用的办公助手,用于记录您接下来需要做的事情。待办事项小工具 - DoBox
2014-01-22T01:53:00Z
2014-01-22T01:53:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】一款简单十分好用的办公助手,用于记录您接下来需要做的事情。待办事项小工具 - DoBox <a href="https://www.cnblogs.com/andrew-blog/p/DoBox_1.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/CodeSnippets.html
Visual Studio使用技巧,创建自己的代码片段 - Andrew.Wangxu
1.代码片段的使用示例
在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个
for(int i = 0; i length;i++)
{
}
2013-12-02T06:11:00Z
2013-12-02T06:11:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】1.代码片段的使用示例
在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个
for(int i = 0; i length;i++)
{
} <a href="https://www.cnblogs.com/andrew-blog/p/CodeSnippets.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/ListObservableCollection.html
List 和 ObservableCollection的区别 - Andrew.Wangxu
在WPF中绑定一个集合的时候,比如:DataGrid.ItemsSource = new List(); 这样的操作,会存在当数据行新增或者删除的时候不会得到及时的通知来刷新界面,而需要重新绑定DataGrid.ItemsSource = null; 再次重新绑定来实现。这样的工作效率比较低,另外使用起来也比较麻烦(在MVVM设计模式中)比较明显。
2013-12-02T05:54:00Z
2013-12-02T05:54:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】在WPF中绑定一个集合的时候,比如:DataGrid.ItemsSource = new List(); 这样的操作,会存在当数据行新增或者删除的时候不会得到及时的通知来刷新界面,而需要重新绑定DataGrid.ItemsSource = null; 再次重新绑定来实现。这样的工作效率比较低,另外使用起来也比较麻烦(在MVVM设计模式中)比较明显。 <a href="https://www.cnblogs.com/andrew-blog/p/ListObservableCollection.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/HTTP404.html
HTTP 错误 404.3 解决 - Andrew.Wangxu
由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。的错误解决
2013-09-28T03:06:00Z
2013-09-28T03:06:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。的错误解决 <a href="https://www.cnblogs.com/andrew-blog/p/HTTP404.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_UndoCommand.html
WPF 跟踪命令和撤销命令(复原) - Andrew.Wangxu
WPF 命令模型缺少一个特性是复原命令。尽管提供了一个 ApplicationCommands.Undo 命令,但是该命令通常被用于编辑控件(如 TextBox 控件),以维护它们自己的 Undo 历史。如果希望支持应用程序范围内的 Undo 特性,就需要在内部跟踪以前的状态,并且触发 Undo 命令时还原该状态。
遗憾的是,扩展 WPF 命令系统并不容易。相对来说没有几个入口点可以使用连接自定义逻辑。为了创建通用、可重用的 Undo 特性,需要创建一组全新的“能够撤销命令的”命令类,以及一个特定类型的命令绑定。我们需要设计自己的用于跟踪和复原命令的系统,使用 CommandManager 类保存命令历史。下图显示了本文的例子。在该例子中,窗口包含两个文本框和一个列表框,可以自由地在这两个文本框中输入内容,而列表框则一直跟踪在这两个文本框中发生的所有命令。可以通过单击 ‘复原’ 按钮还原最后一个命令。
2013-09-21T11:10:00Z
2013-09-21T11:10:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】WPF 命令模型缺少一个特性是复原命令。尽管提供了一个 ApplicationCommands.Undo 命令,但是该命令通常被用于编辑控件(如 TextBox 控件),以维护它们自己的 Undo 历史。如果希望支持应用程序范围内的 Undo 特性,就需要在内部跟踪以前的状态,并且触发 Undo 命令时还原该状态。
遗憾的是,扩展 WPF 命令系统并不容易。相对来说没有几个入口点可以使用连接自定义逻辑。为了创建通用、可重用的 Undo 特性,需要创建一组全新的“能够撤销命令的”命令类,以及一个特定类型的命令绑定。我们需要设计自己的用于跟踪和复原命令的系统,使用 CommandManager 类保存命令历史。下图显示了本文的例子。在该例子中,窗口包含两个文本框和一个列表框,可以自由地在这两个文本框中输入内容,而列表框则一直跟踪在这两个文本框中发生的所有命令。可以通过单击 ‘复原’ 按钮还原最后一个命令。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_UndoCommand.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_Command.html
WPF 自定义命令 以及 命令的启用与禁用 - Andrew.Wangxu
自定义命令:
在WPF中有5个命令类(ApplicationCommands、NavigationCommands、EditingCommands、ComponentCommands 以及 MediaCommands)中存储命令,显然不会为应用程序提供所有可能需要的命令,幸运的是,定义自己的命令非常容易。需要的全部工作仅仅是实例化一个新的 RoutedUICommand 对象 即可。
RoutedUICommand 类提供了几个构造函数。虽然可以创建没有任何附加信息的RoutedUICommand对象,但几乎总是希望提供命令名称、命令文本以及属性类型。此外,可能希望为 InputGestures 集合提供快捷键。
2013-09-21T05:48:00Z
2013-09-21T05:48:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】自定义命令:
在WPF中有5个命令类(ApplicationCommands、NavigationCommands、EditingCommands、ComponentCommands 以及 MediaCommands)中存储命令,显然不会为应用程序提供所有可能需要的命令,幸运的是,定义自己的命令非常容易。需要的全部工作仅仅是实例化一个新的 RoutedUICommand 对象 即可。
RoutedUICommand 类提供了几个构造函数。虽然可以创建没有任何附加信息的RoutedUICommand对象,但几乎总是希望提供命令名称、命令文本以及属性类型。此外,可能希望为 InputGestures 集合提供快捷键。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_Command.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_Localization.html
WPF 本地化(多语言) - Andrew.Wangxu
如果你的程序需要本地化,考虑的因素诸多,例如:当文本改变后,控件的当前高度,宽度 是否合适。所在的位置是否合适、字体、布局是否合适?如果已经构建了一个真正自适应的布局,就不会有问题。用户界面应当能够调整自身以适应动态的内容。下面是建议采用的一些WPF设计原则:
不要使用硬编码的宽度或高度
将Window.SizeToContent 属性设置为Width、Height 或 WidthAndHeight,从而使窗口的尺寸能够根据需要进行变化(根据窗口结构的不同,并不总需要这样,但有时候会很有用)。
使用 ScrollViewer 控件包装大量的文本
2013-09-19T06:07:00Z
2013-09-19T06:07:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】如果你的程序需要本地化,考虑的因素诸多,例如:当文本改变后,控件的当前高度,宽度 是否合适。所在的位置是否合适、字体、布局是否合适?如果已经构建了一个真正自适应的布局,就不会有问题。用户界面应当能够调整自身以适应动态的内容。下面是建议采用的一些WPF设计原则:
不要使用硬编码的宽度或高度
将Window.SizeToContent 属性设置为Width、Height 或 WidthAndHeight,从而使窗口的尺寸能够根据需要进行变化(根据窗口结构的不同,并不总需要这样,但有时候会很有用)。
使用 ScrollViewer 控件包装大量的文本 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_Localization.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/ObservableCollectio.html
List<T>与ObservableCollectio<T> 的区别 - Andrew.Wangxu
在WPF中绑定通常会使用ObservableCollection,为什么不使用List呢?
简单是解释:List不包含值变通知功能,所以绑定了也许会出现绑定的数据与呈现数据不一致的问题。 通常绑定会使用 ObservableCollection。 因为 List没实现 INotifyCollectionChanged ,所以它只是一个普通的容器。~
2013-09-17T14:12:00Z
2013-09-17T14:12:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】在WPF中绑定通常会使用ObservableCollection,为什么不使用List呢?
简单是解释:List不包含值变通知功能,所以绑定了也许会出现绑定的数据与呈现数据不一致的问题。 通常绑定会使用 ObservableCollection。 因为 List没实现 INotifyCollectionChanged ,所以它只是一个普通的容器。~ <a href="https://www.cnblogs.com/andrew-blog/p/ObservableCollectio.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_SingleInstanceApplication.html
WPF 单实例应用程序 - Andrew.Wangxu
例如:Microsoft Word,不管打开多少个文档(也不管它们是如何打开的),一次只能加载 winword.exe 一个实例。 这便是单实例应用程序。
对于这种单实例应用程序,WPF 本身并未提供解决方法,但是可以使用几种变通的方法。基本的技术是当触发 Application.StartUp 事件时,检查另一个应用程序是否正在运行。最简单的方法是使用一个全局的 mutex 对象(mutex对象是操作系统提供的一个用于进程之间通信的同步对象)。这种方法很简单但是功能有限——最重要的是,应用程序新实例无法和已经存在的实例进行通信。 因为当你打开文件的时候,比如*.doc 你需要将该文件的一些基本信息传递到已打开的实例中才行。 当然,你还可以使用 remoting、WCF 进行通信。那还得开发服务端,也使其变得复杂。
2013-09-17T14:08:00Z
2013-09-17T14:08:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】例如:Microsoft Word,不管打开多少个文档(也不管它们是如何打开的),一次只能加载 winword.exe 一个实例。 这便是单实例应用程序。
对于这种单实例应用程序,WPF 本身并未提供解决方法,但是可以使用几种变通的方法。基本的技术是当触发 Application.StartUp 事件时,检查另一个应用程序是否正在运行。最简单的方法是使用一个全局的 mutex 对象(mutex对象是操作系统提供的一个用于进程之间通信的同步对象)。这种方法很简单但是功能有限——最重要的是,应用程序新实例无法和已经存在的实例进行通信。 因为当你打开文件的时候,比如*.doc 你需要将该文件的一些基本信息传递到已打开的实例中才行。 当然,你还可以使用 remoting、WCF 进行通信。那还得开发服务端,也使其变得复杂。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_SingleInstanceApplication.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/ProcessOn.html
推荐一个 HTML5在线的流程图工具——ProcessOn - Andrew.Wangxu
一直想找个简单好用的UML建模工具,无意在茫茫百度中看见了网友推荐的N多工具,从中找了一个叫 ProcessOn 的工具,可以说非常棒。如果我是WEB开发人员,我肯定去深入研究HTML5啦,太令人着迷了。 上个图看看我画的~
2013-09-17T13:27:00Z
2013-09-17T13:27:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】一直想找个简单好用的UML建模工具,无意在茫茫百度中看见了网友推荐的N多工具,从中找了一个叫 ProcessOn 的工具,可以说非常棒。如果我是WEB开发人员,我肯定去深入研究HTML5啦,太令人着迷了。 上个图看看我画的~ <a href="https://www.cnblogs.com/andrew-blog/p/ProcessOn.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_Expander.html
WPF Expander控件(扩展面板) - Andrew.Wangxu
这算是我比较喜欢的一个控件,以前在Winform中也常用类似的。它包装了一块内容,通过单击一个小箭头按钮可以显示或隐藏所包含的内容。在线帮助以及Web页面经常使用这种技术,因为既可以包含大量内容,而又不会让用户面对大量的多余信息而感到无所适从。
使用 Expander控件是非常简单的——只需要在该控件内部包装希望使其能够折叠的内容,通常,每个 Expander 控件开始都是折叠的,但是可以在代码或标记中设置 IsExpanded 属性来改变这种行为。控件的折叠是非常有趣,展开于叠起自动排版,这是我非常喜欢的。
2013-09-14T08:28:00Z
2013-09-14T08:28:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】这算是我比较喜欢的一个控件,以前在Winform中也常用类似的。它包装了一块内容,通过单击一个小箭头按钮可以显示或隐藏所包含的内容。在线帮助以及Web页面经常使用这种技术,因为既可以包含大量内容,而又不会让用户面对大量的多余信息而感到无所适从。
使用 Expander控件是非常简单的——只需要在该控件内部包装希望使其能够折叠的内容,通常,每个 Expander 控件开始都是折叠的,但是可以在代码或标记中设置 IsExpanded 属性来改变这种行为。控件的折叠是非常有趣,展开于叠起自动排版,这是我非常喜欢的。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_Expander.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_DragDrop.html
WPF 的拖拽操作(DragDrop) - Andrew.Wangxu
在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样。如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化。重要的区别是用于拖放操作的方法和事件被集中到了 System.Windows.DragDrop 类中,然后供其他类(如 UIElement )使用。
本质上,拖放操作通过以下三个步骤进行:
用户单击一个元素或选择一个元素特定的区域,并保持鼠标为按下状态。这时,某些信息被搁置起来,并且拖放操作开始。
用户将鼠标移动到其他元素上。如果该元素可以接受正在拖动的内容类型,鼠标指针会变成拖放图标。否则鼠标指针会变成一个内部有一条线的圆形,表示不可拖入该数据。
当用户释放鼠标时,元素接收信息并作出决定如何处理接收到的信息。
2013-09-14T06:02:00Z
2013-09-14T06:02:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样。如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化。重要的区别是用于拖放操作的方法和事件被集中到了 System.Windows.DragDrop 类中,然后供其他类(如 UIElement )使用。
本质上,拖放操作通过以下三个步骤进行:
用户单击一个元素或选择一个元素特定的区域,并保持鼠标为按下状态。这时,某些信息被搁置起来,并且拖放操作开始。
用户将鼠标移动到其他元素上。如果该元素可以接受正在拖动的内容类型,鼠标指针会变成拖放图标。否则鼠标指针会变成一个内部有一条线的圆形,表示不可拖入该数据。
当用户释放鼠标时,元素接收信息并作出决定如何处理接收到的信息。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_DragDrop.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/andrew-blog/p/WPF_TunnelEvent.html
WPF 隧道路由事件 - Andrew.Wangxu
隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。例如,如果 MouseUp 事件是一个隧道路由事件(实际上不是),在特殊的标签示例中单击图形将导致MouseUp 事件首先在窗口中引发、然后是在Grid 控件、接下来在 StackPanel 控件中引发,以此类推,直到到达实际源头,既标签中的图像为止。
很容易识别隧道路由事件,因为它们都以单词 Preview 开头。而且,WPF 通常成对地定义冒泡路由事件和隧道路由事件。这意味着如果发现一个冒泡的 MouseUp 事件,就还可以找到一个 PreviewMouseUp 事件。隧道路由事件总是在冒泡路由事件之前被触发的!
更有趣的是,如果将隧道路由事件标记为已处理过,那么冒泡路由事件就不会发生。这是因为两个事件共享同一个 RoutedEventArgs 类的实例。所以在操作的时候 一定要谨慎。
2013-09-10T13:10:00Z
2013-09-10T13:10:00Z
Andrew.Wangxu
https://www.cnblogs.com/andrew-blog/
【摘要】隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。例如,如果 MouseUp 事件是一个隧道路由事件(实际上不是),在特殊的标签示例中单击图形将导致MouseUp 事件首先在窗口中引发、然后是在Grid 控件、接下来在 StackPanel 控件中引发,以此类推,直到到达实际源头,既标签中的图像为止。
很容易识别隧道路由事件,因为它们都以单词 Preview 开头。而且,WPF 通常成对地定义冒泡路由事件和隧道路由事件。这意味着如果发现一个冒泡的 MouseUp 事件,就还可以找到一个 PreviewMouseUp 事件。隧道路由事件总是在冒泡路由事件之前被触发的!
更有趣的是,如果将隧道路由事件标记为已处理过,那么冒泡路由事件就不会发生。这是因为两个事件共享同一个 RoutedEventArgs 类的实例。所以在操作的时候 一定要谨慎。 <a href="https://www.cnblogs.com/andrew-blog/p/WPF_TunnelEvent.html" target="_blank">阅读全文</a>