- 博客(35)
- 资源 (7)
- 收藏
- 关注
翻译 #147 – Use SetCurrentValue When You Want to Set A Dependency Property Value from Within a Control
使用SetCurrentValue 方法在控件内部设置依赖属性的值当你写一个控件的时候,你可能会想设置控件自己拥有的依赖属性的值。举个例子,一个数字递增递减的控件通过点击箭头按钮改变数字的值。但是问题是直接设置本地属性值,会覆盖其他来源对属性值的改变,比如绑定。如果直接设置本地属性,该属性上所有的绑定都会失效。
2016-06-30 11:13:04 515
翻译 #146 – Use GetValueSource Method to Find the Source of a Dependency Property Value
使用GetValueSource 方法获得依赖属性值的来源有时候能够确定依赖属性当前值的来源是非常有用的。你可以使用DependencyPropertyHelper.GetValueSource 方法实现。在下面的例子中,Foreground 属性的值可以来自样式或者样式里定义的基于的IsEnabled 属性的触发器。
2016-06-30 09:51:56 392
翻译 #131 – Dependency Properties Inherit Values from Higher Up in the Logical Tree(逻辑树中元素的依赖属性可从其上层元素继承)
依赖属性的值可以有很多不同的来源,比较常见的一种是从其逻辑树的更上层继承而来。这意味着当我们在XAML或者代码中设置一个依赖属性的值的时候,这个值会沿着逻辑树向下传递给其他同样拥有这个依赖属性的元素。下面是个例子。有若干个控件的FontStyle 属性值继承自最高级的Window 元素。
2016-06-29 09:45:20 572
翻译 #128 – Using Code Snippets to Implement a Dependency Property(用代码段实现依赖属性)
用代码段实现依赖属性Visual Studio 2010有一个很方便在类中实现依赖属性的功能——插入代码段。首先,在代码编辑页面中空白行中点击鼠标右键,选中“插入代码段”选中NetFX30
2016-06-28 14:29:14 499
翻译 #123 – Coercing a Dependency Property(强制转换依赖属性的值)
在一个类中使用依赖属性的时候,可以选择在注册该依赖属性的时候指定一个强制转换回调函数(coercion callback)。当属性将要返回一个属性值的时候该回调函数被调用。通过强制转换回调函数可以强制改变依赖属性的值。在注册依赖属性的时候,通过CoerceValueCallback 委托指定强制转回调函数
2016-06-28 11:10:08 489
翻译 #122 – Validating a Dependency Property(验证依赖属性)
在某个类中使用依赖属性的时候,可以选择在是否注册依赖属性的时候指定一个验证回调函数(validation callback)。如果指定了验证毁掉函数,当为该依赖属性的设置一新的值的时候,这个回调函数会被调用并返回true或者false以表示新设置的值是否有效。在注册依赖属性的时候指定回调函数。
2016-06-28 10:34:51 449
翻译 #121 – Being Notified When the Value of a Dependency Property Changes(属性值改变通知)
一个应用了依赖属性的类可以选择当属性值发生改变的时候发出通知。要实现通知,该类在注册属性的时候要指定一个PropertyChangedCallback
2016-06-27 11:22:42 369
翻译 #120 – Clearing a Dependency Property Value(清除依赖属性的值)
我们可以在代码或者XAML中设置依赖属性的值,并且本地值会覆盖继承而来的值或者默认值。同样也可以使用DependencyObject.ClearValue 方法清除属性值。这样会使本地属性值失效,依赖属性的值将会恢复为继承而来的值或者默认值。(属性值可以有多个来源)
2016-06-27 10:35:08 500
翻译 #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 650
翻译 #117 – Registering a Dependency Property(注册一个依赖属性)
为了使用依赖属性,要在使用的类中创建一个DependencyProperty 类的静态实例。之所以创建静态的实例是因为在DependencyProperty 类中仅仅只是描述这个依赖属性,而并没有真正的存储这个依赖属性的值。你可以
2016-06-23 17:28:43 546
翻译 #116 – Dependency Property Values Are Stored in the DependencyObject(依赖属性存储在DependencyObject中)
标准的CLR属性值是存储在定义该属性的实例中的,即使这个属性自创建以后从来没有被复制或者更改,它依然会占用内存空间。而依赖属性的值只有被设置为非默认值的时候才会被存储(值不占用内存空间),而当访问没有设置值的依赖属性将会只返回一个默认的值。
2016-06-21 18:13:05 308
翻译 #114 – How Dependency Properties Are Implemented(依赖属性是如何应用的)
在WPF中,依赖属性可以当做一般CLR属性一样使用,但是它实际应用起来却完全不一样。它增加了许多复杂的功能处理数据绑定、属性继承和属性更改通知。一个想要应用依赖属性的类必须继承自DependencyObject,DependencyObject 类支持读写依赖属性。
2016-06-21 17:51:03 442
翻译 #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 342
翻译 #111 – The Visual Tree(可视树)
WPF中的可视树是将逻辑树分解为最原始的可视元素。逻辑树中的元素一般都是控件,但是可视树中确实显示控件的基础可视元素。可视树中所有的元素都源自于 Visual o或者Visual3D。举个例子,下面是一个XAML的可视树
2016-06-17 15:36:28 613
翻译 #108 – The Logical Tree(逻辑树)
在WPF中,逻辑树表示组成UI的元素的层级关系。如果UI在XAML中定义,逻辑树可以看做是由一组XAML元素通过 父/子 关系组成的树。逻辑树同样可以被认为是一种描述运行环境中哥哥元素间关系的模型。了解逻辑树可以帮助理解以下内容: -资源查找 -属性继承 -事件路由
2016-06-16 10:16:44 1015
翻译 #106 – Set Property Value to Point to Another Object(设置属性值指向另一个object)
有时候在XAML中需要设置当前元素某个属性指向另外一个元素。比如CommandTarget 属性,它被用来判断当前控件是否是command的发起者。
2016-06-16 09:48:53 375
翻译 #100 – Loose XAML Files(松散XAML文件)
松散XAML文件是指不和后台代码有关联并且不会变应用程序编译的XAML。一个松散的XAML文件可以被IE浏览器加载并显示出其界面。下面是一些关于松散XAML的规则: -最高级的根元素不能是Window,但可以是Page或者其他GUI元素(例如StackPan
2016-06-14 14:11:46 1117
翻译 #98 – How Attached Properties Work in WPF(附加属性在WPF中如何工作)
在XAML中,附加属性允许给并不是定义该属性的类型的实例附加一个属性值。(例如Grid.Row 属性可以设置给Button)。当XAML解析器遇到附加属性的时候,它会调用定义属性的类的静态方法获取或者设置附加属性的值
2016-06-13 17:46:19 380
翻译 #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 667
翻译 #90 – 单步调试VS2010自带的源码(Stepping Into .NET Source Code in Visual Studio 2010)
有的时候能够在调试器中单步调试VS2010自带类.NET库的源码如果工作,而不是仅仅只查看元数据,是非常有帮助的。
2016-06-12 16:04:19 1688
翻译 #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 397
翻译 #72 – XAML Namespaces
在XAML中,一个命名空间就是一个通过URI引用表示的名字的集合,这些名字可以在XAML文档中作为元素和属性使用。(参见W3C definition of namespace)。除了作为在XAML中使用的元素和属性的名字集合以外,一个XAML命名空间也对应相应的.NET类,这些类可能包含在一个或者多个.NET命名空间中。
2016-06-08 11:00:35 287
翻译 #69 – Internet Explorer Can Interpret XAML Directly(IE可以直接编译XAML文件)
XAML并不是能被直接执行的代码,它是一种可以被工具解析的用户接口定义。你可以直接使用IE载入XAML,IE会根据XAML文件渲染出用户界面。 你可以
2016-06-07 17:21:43 646
翻译 #55 – Application.ShutdownMode
WPF的Application 类有一个ShutdownMode 属性,可以判断调用ShutDown方法终止程序的条件。这个属性的默认值是ShutdownMode.OnLastWindowClose,它表示当所有应用程序的窗口关闭后隐式的调用ShutDown方法关闭程序。
2016-06-07 10:41:43 827
翻译 #52 – Defining and Using Application-Scoped Resources(定义和使用整个应用程序域内资源)
如果你需要资源在整个WPF应用程序范围内都可以使用,可以让资源和整个应用程序。你可以定义一个作用域为整个应用程序(application-scoped )的资源在应用程序的XAML文件中(App.xaml)。
2016-06-06 18:54:12 321
翻译 #50 – Application-Scoped Properties(作用在应用程序域内的属性)
在Application类中,有一个IDictionary 类型的属性叫做Properties,它可以存储一对(关键字/值)。你可以用这个字典属性存储任意需要在整个Application范围内使用的属性。我们可以通过处理Application.DispatcherUnhandledException 事件来解决这类异常。
2016-06-06 14:58:08 437
翻译 #49 – Unhandled Exceptions(未处理的异常)
当一个在代码中没有处理的异常在WPF应用程序中抛出的时候,会导致一个未处理的异常并且程序强制退出。这会导致窗口出现下面类似的画面:当它发生的时候,程序会立刻退出,用户根本没有机会保存未完成的工作,并且用户无法获得其它有用的信息。总之,程序崩溃。我们可以通过处理Application.DispatcherUnhandledException 事件来解决这类异常。
2016-06-03 17:59:20 1302
翻译 #28 – DispatcherObject
DispatcherObject类表示一个与分配器(Dispatcher)有关联的Object。分配器在一个特定的线程上掌管着一个请求队列。它可以在与之相关联的线程上调用方法。DispatcherObject是所有与分配器相关的类的基类,并与创建它的线程关联到一起。
2016-06-03 09:34:21 515
翻译 #18 – Silverlight and WPF Differences(Silverlight和WPF的区别)
Silverlight原名为WPF/E(WPF/Everywhere),强调Silverlight跟WPF一样有相同的程序设计模型和使用许多相同的控件,但是它却是基于通过浏览器下载并期望运行在外部多种平台上的客户端运行库。下面介绍WPF和Silverlight的核心区别。
2016-06-02 18:20:01 605
翻译 #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 625
翻译 #14 – Page-Based Navigation(基于网页的应用程序)
WPF应用程序可以由一系列的网页构成。这和许多显示一个主窗口,然后弹出对话框和弹出框的传统的应用程序不同。创建一个基于网页的应用程序,你可以使用Page类的实例替代Window作为最高级元素。
2016-06-02 17:13:31 476
转载 XAML转意字符(转载)
XAML特殊字符 此部分只限制在XAML中,代码中不受此类限制。 1、特殊字符转义 XAML 特殊字符转义特殊字符转义小于号 <大于号 >>取址符 &&引号 ""
2016-06-02 17:07:56 882
翻译 #5 – Vector Graphics and Resolution Independence(矢量图与像素无关)
在WPF里,渲染图界面使用的是向量图而非位图。不管是内置的控件还是用户自定义的控件。这样你绘制界面元素的时候使用的是基本的图形单元,比如几何图形、线条和多边形等,而不是像位图一样为屏幕上的每一个像素都指定一个值。因为WPF使用的是矢量图,UI元素将通过与设备分辨率无关的方式进行渲染。WPF里面的图形元素的尺寸使用的是与设备无关的单位,每个单位的大小为1/96英寸。这就意味着UI元素将始终以特定的大小尺寸被渲染,而不用收到外部设备DPI的影响。
2016-06-02 10:58:54 738
翻译 #2 – Rendering Tiers(WPF渲染级别)
WPF应用程序会在运行自动检查显卡能力,并分配对应的渲染级别时,以确定那些功能可以被显卡执行。级别0: 没有硬件加速,所有的渲染都通过软件完成级别1: 部分功能硬件加速,DirectX版本>=9.0。硬件加速支持:级别2: 大部分功能使用硬件加速,DirectX版本>=9.0。
2016-06-01 18:25:21 770
翻译 UseLayoutRounding vs. SnapsToDevicePixels
前几天无意中在网上发现一个博客系列《关于WPF你应该知道的2000件事》,是以为叫Sean Sexton的牛人写的。个人觉得很有意思,因此决定找些自己感兴趣的翻译出来。就从曾经困扰我很久的一个SnapsToDevicePixels开始吧。译文如下:#454 – UseLayoutRounding vs. SnapsToDevicePixelsUIElement类有一个控制像素对齐的
2016-06-01 17:48:51 1446
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人