自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 资源 (7)
  • 收藏
  • 关注

翻译 #167 – Implementing a Dependency Property That Is A Collection(实现一个Collection类型的依赖属性)

当你创建一个Collection类型的依赖属性的时候,你需要创建一个新的Collection类型的实例作为该属性的默认值,而不仅是一个静态的值。例如,我们定义一个Person.IQ 的依赖属性,默认值是100,

2016-07-20 11:13:41 301

翻译 #163 – Constructing FrameworkPropertyMetadata(构造FrameworkPropertyMetadata)

当你查看一个将自己的元数据存储在FrameworkPropertyMetadata实例中的依赖属性的元数据的时候,你可以看到下面这些bool类型的属性。在你构造FrameworkPropertyMetadata实例的时候,你不需要为所有这些bool类型的属性单独赋值。构造函数支持通过一些列枚举的逻辑或作为参数。而枚举值是FrameworkPropertyMetadataOptions 类型的枚举。

2016-07-19 18:27:39 1053

翻译 #160 – Be Careful When Setting Dependency Property Values from a DependencyObject Constructor

在构造函数中为依赖属性赋值必须小心使用C#编码的时候,我们应当尽量避免在构造函数中调用虚函数。因为你的构造函数很有可能是通过子类调用的,而这个时候子类并没有完全初始化完成。如果子类中重写了在构造函数中被调用的虚函数,那么这个被重写的虚函数在构造函数中将不会被父类调用。

2016-07-16 13:16:24 285

翻译 #159 – Creating a Read-Only Dependency Property(创建一个只读的依赖属性)

创建一个只读的自定义依赖属性和创建一个标准的依赖属性稍有不同。主要体现在: -使用DependencyProperty.RegisterReadOnly 注册而不是Register -创建一个静态的DependencyPropertyKey 类型的拷贝,用来公开静态的DependencyProperty属性 -只实现对应的CLR属性的get方法

2016-07-15 15:29:52 821

翻译 #158 – When to Create a Custom Dependency Property(哪些情况要创建自定义依赖属性)

当你创建一个类,并未其创建属性的时候,你需要确定是否将它创建为完全的WPF依赖属性。如果某个属性是标准的CLR属性,而非依赖属性,你依然可以在XAML中设置它的值。但是在下面这些情况下,你可能需要自定义依赖属性:

2016-07-14 10:22:29 323

翻译 #155 – Implementing an Attached Dependency Property(如何实现附加属性)

当你需要实现一个在XAML使用的附加属性的时候,你可以使用 DependencyProperty.Register 函数,它的使用方法和Register函数一样。下面的例子中,我们打算注册一个附加属性 Person.AgeProperty

2016-07-07 09:35:55 342

翻译 #154 – Reusing an Existing Dependency Property in Your Class(重用依赖属性)

用DependencyProperty.Register 方法可以简单的使用依赖属性。同样,我们可以使用DependencyProperty.AddOwner 方法重用已经存在的依赖属性。当重用一个已经存在的依赖属性的时候,你可以选择会否在你的类中为它指定一个新的元数据。同样也需要定义GetValue/SetValue 来实现对属性的读取。

2016-07-05 10:14:59 376

翻译 #151 – Dependency Properties Remember Non-Coerced Values(依赖属性强制转换之前的值会被记住)

如果你给依赖属性设置了某个值,并且它被强制转换了。这个设置的原始值会被记住。当你移除强制转换的判断条件后,改原始值将会被作为属性值返回。假如我们有一个Person 类,它偶一个Age 依赖属性和一个SuperOld 属性。假定如果SuperOld 的值为true,Age 属性的值就会被强制转换为999。

2016-07-04 17:34:04 439

翻译 #150 – An Example of Using PropertyChanged and CoerceValue Callbacks(PropertyChanged和CoerceValue例子)

在使用依赖属性的时候,有的时候可能会遇到需要强制限定多个依赖属性之间的关系的情况,这个时候一般会用CoerceValueCallback 和PropertyChangedCallbacks 来实现。举个例子,假定我们有一个Person 类,有BirthYear(出生)、DeathYear(去世) 和MarriageYear(结婚) 三个属性。我们确定结婚时间必须在出生和去世之间,出生时间必须早

2016-07-01 10:55:56 512

翻译 #147 – Use SetCurrentValue When You Want to Set A Dependency Property Value from Within a Control

使用SetCurrentValue 方法在控件内部设置依赖属性的值当你写一个控件的时候,你可能会想设置控件自己拥有的依赖属性的值。举个例子,一个数字递增递减的控件通过点击箭头按钮改变数字的值。但是问题是直接设置本地属性值,会覆盖其他来源对属性值的改变,比如绑定。如果直接设置本地属性,该属性上所有的绑定都会失效。

2016-06-30 11:13:04 483

翻译 #146 – Use GetValueSource Method to Find the Source of a Dependency Property Value

使用GetValueSource 方法获得依赖属性值的来源有时候能够确定依赖属性当前值的来源是非常有用的。你可以使用DependencyPropertyHelper.GetValueSource 方法实现。在下面的例子中,Foreground 属性的值可以来自样式或者样式里定义的基于的IsEnabled 属性的触发器。

2016-06-30 09:51:56 372

翻译 #131 – Dependency Properties Inherit Values from Higher Up in the Logical Tree(逻辑树中元素的依赖属性可从其上层元素继承)

依赖属性的值可以有很多不同的来源,比较常见的一种是从其逻辑树的更上层继承而来。这意味着当我们在XAML或者代码中设置一个依赖属性的值的时候,这个值会沿着逻辑树向下传递给其他同样拥有这个依赖属性的元素。下面是个例子。有若干个控件的FontStyle 属性值继承自最高级的Window 元素。

2016-06-29 09:45:20 558

翻译 #128 – Using Code Snippets to Implement a Dependency Property(用代码段实现依赖属性)

用代码段实现依赖属性Visual Studio 2010有一个很方便在类中实现依赖属性的功能——插入代码段。首先,在代码编辑页面中空白行中点击鼠标右键,选中“插入代码段”选中NetFX30

2016-06-28 14:29:14 483

翻译 #123 – Coercing a Dependency Property(强制转换依赖属性的值)

在一个类中使用依赖属性的时候,可以选择在注册该依赖属性的时候指定一个强制转换回调函数(coercion callback)。当属性将要返回一个属性值的时候该回调函数被调用。通过强制转换回调函数可以强制改变依赖属性的值。在注册依赖属性的时候,通过CoerceValueCallback 委托指定强制转回调函数

2016-06-28 11:10:08 479

翻译 #122 – Validating a Dependency Property(验证依赖属性)

在某个类中使用依赖属性的时候,可以选择在是否注册依赖属性的时候指定一个验证回调函数(validation callback)。如果指定了验证毁掉函数,当为该依赖属性的设置一新的值的时候,这个回调函数会被调用并返回true或者false以表示新设置的值是否有效。在注册依赖属性的时候指定回调函数。

2016-06-28 10:34:51 434

翻译 #121 – Being Notified When the Value of a Dependency Property Changes(属性值改变通知)

一个应用了依赖属性的类可以选择当属性值发生改变的时候发出通知。要实现通知,该类在注册属性的时候要指定一个PropertyChangedCallback

2016-06-27 11:22:42 357

翻译 #120 – Clearing a Dependency Property Value(清除依赖属性的值)

我们可以在代码或者XAML中设置依赖属性的值,并且本地值会覆盖继承而来的值或者默认值。同样也可以使用DependencyObject.ClearValue 方法清除属性值。这样会使本地属性值失效,依赖属性的值将会恢复为继承而来的值或者默认值。(属性值可以有多个来源)

2016-06-27 10:35:08 481

翻译 #118 – Don’t Add Code to Dependency Property Getter/Setter(不要在依赖属性的Getter/Setter中加入处理代码)

当我们使用自定义的依赖属性的时候,一般通过getter/setter 方法包裹DependencyObject.GetValue 和DependencyObject.SetValue 来使用。这样可以让依赖属性像一般的公共语言运行库(CLR)属性一样被使用,下面是一个例子:

2016-06-27 09:53:20 640

翻译 #117 – Registering a Dependency Property(注册一个依赖属性)

为了使用依赖属性,要在使用的类中创建一个DependencyProperty 类的静态实例。之所以创建静态的实例是因为在DependencyProperty 类中仅仅只是描述这个依赖属性,而并没有真正的存储这个依赖属性的值。你可以

2016-06-23 17:28:43 528

翻译 #116 – Dependency Property Values Are Stored in the DependencyObject(依赖属性存储在DependencyObject中)

标准的CLR属性值是存储在定义该属性的实例中的,即使这个属性自创建以后从来没有被复制或者更改,它依然会占用内存空间。而依赖属性的值只有被设置为非默认值的时候才会被存储(值不占用内存空间),而当访问没有设置值的依赖属性将会只返回一个默认的值。

2016-06-21 18:13:05 298

翻译 #114 – How Dependency Properties Are Implemented(依赖属性是如何应用的)

在WPF中,依赖属性可以当做一般CLR属性一样使用,但是它实际应用起来却完全不一样。它增加了许多复杂的功能处理数据绑定、属性继承和属性更改通知。一个想要应用依赖属性的类必须继承自DependencyObject,DependencyObject 类支持读写依赖属性。

2016-06-21 17:51:03 430

翻译 #112 – Navigating the Visual Tree in Code(在后台代码中导航可视树)

你可以用VisualTreeHelper.GetChildrenCount 和GetChild 方法枚举可视树中所有的元素。你可以用下面的循环获得某个父级元素下面所有的可视树子元素:for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) Debug.WriteLine(VisualTreeHe

2016-06-20 18:06:34 331

翻译 #111 – The Visual Tree(可视树)

WPF中的可视树是将逻辑树分解为最原始的可视元素。逻辑树中的元素一般都是控件,但是可视树中确实显示控件的基础可视元素。可视树中所有的元素都源自于 Visual o或者Visual3D。举个例子,下面是一个XAML的可视树

2016-06-17 15:36:28 595

翻译 #108 – The Logical Tree(逻辑树)

在WPF中,逻辑树表示组成UI的元素的层级关系。如果UI在XAML中定义,逻辑树可以看做是由一组XAML元素通过 父/子 关系组成的树。逻辑树同样可以被认为是一种描述运行环境中哥哥元素间关系的模型。了解逻辑树可以帮助理解以下内容: -资源查找 -属性继承 -事件路由

2016-06-16 10:16:44 966

翻译 #106 – Set Property Value to Point to Another Object(设置属性值指向另一个object)

有时候在XAML中需要设置当前元素某个属性指向另外一个元素。比如CommandTarget 属性,它被用来判断当前控件是否是command的发起者。

2016-06-16 09:48:53 362

翻译 #100 – Loose XAML Files(松散XAML文件)

松散XAML文件是指不和后台代码有关联并且不会变应用程序编译的XAML。一个松散的XAML文件可以被IE浏览器加载并显示出其界面。下面是一些关于松散XAML的规则:  -最高级的根元素不能是Window,但可以是Page或者其他GUI元素(例如StackPan

2016-06-14 14:11:46 1072

翻译 #98 – How Attached Properties Work in WPF(附加属性在WPF中如何工作)

在XAML中,附加属性允许给并不是定义该属性的类型的实例附加一个属性值。(例如Grid.Row 属性可以设置给Button)。当XAML解析器遇到附加属性的时候,它会调用定义属性的类的静态方法获取或者设置附加属性的值

2016-06-13 17:46:19 362

翻译 #95 – x:Name vs. Name

从基类中继承了Name 属性的元素可以使用Name 属性。但是继承自没有定义Name 属性的类的元素,如果想在后台代码中被引用,必须使用x:Name 属性。通常,这Name and x:Name 可以互换,前者是一个类的真实属性,后者是x: 命名空间中一个通过XAML语法解析器转换使用的指令。 从基类中继承了Name 属性的元素可以使用Name 属性。但是继承自没有定义Name 属性

2016-06-13 14:05:49 652

翻译 #90 – 单步调试VS2010自带的源码(Stepping Into .NET Source Code in Visual Studio 2010)

有的时候能够在调试器中单步调试VS2010自带类.NET库的源码如果工作,而不是仅仅只查看元数据,是非常有帮助的。

2016-06-12 16:04:19 1665

翻译 #85 – Two Main Namespaces Used in Every WPF XAML File(2个在每个XAML中都会使用的命名空间)

在WPF项目的每个XAML文件的顶部,你都会发现两个命名空间:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

2016-06-08 16:16:10 389

翻译 #72 – XAML Namespaces

在XAML中,一个命名空间就是一个通过URI引用表示的名字的集合,这些名字可以在XAML文档中作为元素和属性使用。(参见W3C definition of namespace)。除了作为在XAML中使用的元素和属性的名字集合以外,一个XAML命名空间也对应相应的.NET类,这些类可能包含在一个或者多个.NET命名空间中。

2016-06-08 11:00:35 277

翻译 #69 – Internet Explorer Can Interpret XAML Directly(IE可以直接编译XAML文件)

XAML并不是能被直接执行的代码,它是一种可以被工具解析的用户接口定义。你可以直接使用IE载入XAML,IE会根据XAML文件渲染出用户界面。 你可以

2016-06-07 17:21:43 633

翻译 #55 – Application.ShutdownMode

WPF的Application 类有一个ShutdownMode 属性,可以判断调用ShutDown方法终止程序的条件。这个属性的默认值是ShutdownMode.OnLastWindowClose,它表示当所有应用程序的窗口关闭后隐式的调用ShutDown方法关闭程序。

2016-06-07 10:41:43 808

翻译 #52 – Defining and Using Application-Scoped Resources(定义和使用整个应用程序域内资源)

如果你需要资源在整个WPF应用程序范围内都可以使用,可以让资源和整个应用程序。你可以定义一个作用域为整个应用程序(application-scoped )的资源在应用程序的XAML文件中(App.xaml)。

2016-06-06 18:54:12 306

翻译 #50 – Application-Scoped Properties(作用在应用程序域内的属性)

在Application类中,有一个IDictionary 类型的属性叫做Properties,它可以存储一对(关键字/值)。你可以用这个字典属性存储任意需要在整个Application范围内使用的属性。我们可以通过处理Application.DispatcherUnhandledException 事件来解决这类异常。

2016-06-06 14:58:08 423

翻译 #49 – Unhandled Exceptions(未处理的异常)

当一个在代码中没有处理的异常在WPF应用程序中抛出的时候,会导致一个未处理的异常并且程序强制退出。这会导致窗口出现下面类似的画面:当它发生的时候,程序会立刻退出,用户根本没有机会保存未完成的工作,并且用户无法获得其它有用的信息。总之,程序崩溃。我们可以通过处理Application.DispatcherUnhandledException 事件来解决这类异常。

2016-06-03 17:59:20 1229

翻译 #28 – DispatcherObject

DispatcherObject类表示一个与分配器(Dispatcher)有关联的Object。分配器在一个特定的线程上掌管着一个请求队列。它可以在与之相关联的线程上调用方法。DispatcherObject是所有与分配器相关的类的基类,并与创建它的线程关联到一起。

2016-06-03 09:34:21 500

翻译 #18 – Silverlight and WPF Differences(Silverlight和WPF的区别)

Silverlight原名为WPF/E(WPF/Everywhere),强调Silverlight跟WPF一样有相同的程序设计模型和使用许多相同的控件,但是它却是基于通过浏览器下载并期望运行在外部多种平台上的客户端运行库。下面介绍WPF和Silverlight的核心区别。

2016-06-02 18:20:01 591

翻译 #16 – Use Direct3D For Hard-Core 3D Applications

原文地址:https://wpf.2000things.com/2010/07/28/16-use-direct3d-for-hard-core-3d-applications/虽然WPF支持绘制3D,但是在需要WPF所不支持的3D功能或者最大性能进行3D绘图的时候还是需要使用Direct3D。(毕竟WPF并不是专们用于3D绘图)WPF 4.0基于 DirectX 9,因此它不

2016-06-02 17:44:51 606

翻译 #14 – Page-Based Navigation(基于网页的应用程序)

WPF应用程序可以由一系列的网页构成。这和许多显示一个主窗口,然后弹出对话框和弹出框的传统的应用程序不同。创建一个基于网页的应用程序,你可以使用Page类的实例替代Window作为最高级元素。

2016-06-02 17:13:31 458

你比我猜,游戏程序(windows)

公司年会的时候需要做一个你比我猜的游戏,于是让我写了一个游戏UI,十分简单,现在分享出来给大家。这个程序需要.Net Framework4

2018-01-31

WPF播放GIF图片源代码

WPF播放GIF项目,里面有实现了一个控件(GIFImage)播放GIF控件,然后在窗体中使用。这个控件可以单独拿出来使用。

2016-09-23

WPF拖曳例子

WPF拖曳例子

2016-06-28

WPF Drag Drop例子

WPF Drag Drop例子

2016-06-28

官方WPF 拖曳例子源代码

官方WPF 拖曳例子

2016-06-28

微软C#无线网络管理库

微软官方C#编写的无线网络管理类库

2016-05-24

电脑报VC++教程

简单易懂的介绍了MFC编程,示例不错,适合新手。

2007-12-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除