WPF
文章平均质量分 65
Milo米啊米啊米
admihbf
展开
-
#122 – Validating a Dependency Property(验证依赖属性)
在某个类中使用依赖属性的时候,可以选择在是否注册依赖属性的时候指定一个验证回调函数(validation callback)。如果指定了验证毁掉函数,当为该依赖属性的设置一新的值的时候,这个回调函数会被调用并返回true或者false以表示新设置的值是否有效。在注册依赖属性的时候指定回调函数。翻译 2016-06-28 10:34:51 · 449 阅读 · 0 评论 -
#123 – Coercing a Dependency Property(强制转换依赖属性的值)
在一个类中使用依赖属性的时候,可以选择在注册该依赖属性的时候指定一个强制转换回调函数(coercion callback)。当属性将要返回一个属性值的时候该回调函数被调用。通过强制转换回调函数可以强制改变依赖属性的值。在注册依赖属性的时候,通过CoerceValueCallback 委托指定强制转回调函数翻译 2016-06-28 11:10:08 · 489 阅读 · 0 评论 -
#128 – Using Code Snippets to Implement a Dependency Property(用代码段实现依赖属性)
用代码段实现依赖属性Visual Studio 2010有一个很方便在类中实现依赖属性的功能——插入代码段。首先,在代码编辑页面中空白行中点击鼠标右键,选中“插入代码段”选中NetFX30翻译 2016-06-28 14:29:14 · 499 阅读 · 0 评论 -
#316 – 改变按钮的ClickMode(Changing the ClickMode of a Button)
在Windows系统中,一般的按钮都会在点击之后执行某个操作。通常“点击”被认为是鼠标左键被“按下”然后“释放”这一连续动作的组合,而和按钮相关联的操作会在“释放”动作结束后触发。在WPF中,你可以通过改变Button.ClickMode 属性改变 Click 事件触发的时间。ClickMode 的值为一下的枚举: -ClickMode.Release – 当释放鼠标按键的时候触发Clic翻译 2016-10-09 16:52:04 · 2120 阅读 · 0 评论 -
#131 – Dependency Properties Inherit Values from Higher Up in the Logical Tree(逻辑树中元素的依赖属性可从其上层元素继承)
依赖属性的值可以有很多不同的来源,比较常见的一种是从其逻辑树的更上层继承而来。这意味着当我们在XAML或者代码中设置一个依赖属性的值的时候,这个值会沿着逻辑树向下传递给其他同样拥有这个依赖属性的元素。下面是个例子。有若干个控件的FontStyle 属性值继承自最高级的Window 元素。翻译 2016-06-29 09:45:20 · 572 阅读 · 0 评论 -
#146 – Use GetValueSource Method to Find the Source of a Dependency Property Value
使用GetValueSource 方法获得依赖属性值的来源有时候能够确定依赖属性当前值的来源是非常有用的。你可以使用DependencyPropertyHelper.GetValueSource 方法实现。在下面的例子中,Foreground 属性的值可以来自样式或者样式里定义的基于的IsEnabled 属性的触发器。翻译 2016-06-30 09:51:56 · 391 阅读 · 0 评论 -
#147 – Use SetCurrentValue When You Want to Set A Dependency Property Value from Within a Control
使用SetCurrentValue 方法在控件内部设置依赖属性的值当你写一个控件的时候,你可能会想设置控件自己拥有的依赖属性的值。举个例子,一个数字递增递减的控件通过点击箭头按钮改变数字的值。但是问题是直接设置本地属性值,会覆盖其他来源对属性值的改变,比如绑定。如果直接设置本地属性,该属性上所有的绑定都会失效。翻译 2016-06-30 11:13:04 · 515 阅读 · 0 评论 -
#150 – An Example of Using PropertyChanged and CoerceValue Callbacks(PropertyChanged和CoerceValue例子)
在使用依赖属性的时候,有的时候可能会遇到需要强制限定多个依赖属性之间的关系的情况,这个时候一般会用CoerceValueCallback 和PropertyChangedCallbacks 来实现。举个例子,假定我们有一个Person 类,有BirthYear(出生)、DeathYear(去世) 和MarriageYear(结婚) 三个属性。我们确定结婚时间必须在出生和去世之间,出生时间必须早翻译 2016-07-01 10:55:56 · 536 阅读 · 0 评论 -
#320 – StackPanel默认如何设置子控件的大小(Default Size of StackPanel Child Controls)
默认情况下,StackPanel 根据下面的逻辑来设置子控件的大小:如果是Orientation 是垂直的: -子控件的高度将根据其自身的需要确定 -子控件的宽度将横向占满整个StackPanel 如果Orientation 是水平的: -子控件的宽度将根据其自身的需要确定 -子控件的高度将横向占满整个StackPanel 下面的地址将StackPanel 的子控件垂直翻译 2016-10-09 17:27:55 · 4217 阅读 · 0 评论 -
#155 – Implementing an Attached Dependency Property(如何实现附加属性)
当你需要实现一个在XAML使用的附加属性的时候,你可以使用 DependencyProperty.Register 函数,它的使用方法和Register函数一样。下面的例子中,我们打算注册一个附加属性 Person.AgeProperty翻译 2016-07-07 09:35:55 · 354 阅读 · 0 评论 -
#154 – Reusing an Existing Dependency Property in Your Class(重用依赖属性)
用DependencyProperty.Register 方法可以简单的使用依赖属性。同样,我们可以使用DependencyProperty.AddOwner 方法重用已经存在的依赖属性。当重用一个已经存在的依赖属性的时候,你可以选择会否在你的类中为它指定一个新的元数据。同样也需要定义GetValue/SetValue 来实现对属性的读取。翻译 2016-07-05 10:14:59 · 391 阅读 · 0 评论 -
#331 – 各种控件HorizontalContentAlignment 和VerticalContentAlignment的默认值
各种控件HorizontalContentAlignment / VerticalContentAlignment 默认值Button – Center, CenterCalendar – Left, TopCheckBox – Left, TopComboBox – Left, TopContextMenu – Left, CenterDataGrid – Left,翻译 2016-10-10 14:30:58 · 1770 阅读 · 0 评论 -
#160 – Be Careful When Setting Dependency Property Values from a DependencyObject Constructor
在构造函数中为依赖属性赋值必须小心使用C#编码的时候,我们应当尽量避免在构造函数中调用虚函数。因为你的构造函数很有可能是通过子类调用的,而这个时候子类并没有完全初始化完成。如果子类中重写了在构造函数中被调用的虚函数,那么这个被重写的虚函数在构造函数中将不会被父类调用。翻译 2016-07-16 13:16:24 · 301 阅读 · 0 评论 -
#159 – Creating a Read-Only Dependency Property(创建一个只读的依赖属性)
创建一个只读的自定义依赖属性和创建一个标准的依赖属性稍有不同。主要体现在: -使用DependencyProperty.RegisterReadOnly 注册而不是Register -创建一个静态的DependencyPropertyKey 类型的拷贝,用来公开静态的DependencyProperty属性 -只实现对应的CLR属性的get方法翻译 2016-07-15 15:29:52 · 838 阅读 · 0 评论 -
#158 – When to Create a Custom Dependency Property(哪些情况要创建自定义依赖属性)
当你创建一个类,并未其创建属性的时候,你需要确定是否将它创建为完全的WPF依赖属性。如果某个属性是标准的CLR属性,而非依赖属性,你依然可以在XAML中设置它的值。但是在下面这些情况下,你可能需要自定义依赖属性:翻译 2016-07-14 10:22:29 · 340 阅读 · 0 评论 -
#163 – Constructing FrameworkPropertyMetadata(构造FrameworkPropertyMetadata)
当你查看一个将自己的元数据存储在FrameworkPropertyMetadata实例中的依赖属性的元数据的时候,你可以看到下面这些bool类型的属性。在你构造FrameworkPropertyMetadata实例的时候,你不需要为所有这些bool类型的属性单独赋值。构造函数支持通过一些列枚举的逻辑或作为参数。而枚举值是FrameworkPropertyMetadataOptions 类型的枚举。翻译 2016-07-19 18:27:39 · 1075 阅读 · 0 评论 -
#167 – Implementing a Dependency Property That Is A Collection(实现一个Collection类型的依赖属性)
当你创建一个Collection类型的依赖属性的时候,你需要创建一个新的Collection类型的实例作为该属性的默认值,而不仅是一个静态的值。例如,我们定义一个Person.IQ 的依赖属性,默认值是100,翻译 2016-07-20 11:13:41 · 315 阅读 · 0 评论 -
#168 – 类的继承关系
WPF类的继承关系翻译 2016-07-20 11:16:40 · 384 阅读 · 0 评论 -
#304 – 为没有文本标题的控件定义Access 键(Defining an Access Key That Gives Focus to a Different Control)
有些控件,并没有自己的文本标题,他们可以通过与之相邻的Label来定义自己的Access 键。通过Access 键,他们可以获得输入焦点。下面的例子中,在“Enter Name”这个Label 旁边有一个TextBox 控件,你可以在里面输入你的名字。在前面的Label中 'N'前面有下划线,因此‘N’就是TextBox 的Access 键。如果你按下ALT+N,那么后面的TextBox 将会翻译 2016-09-26 16:07:42 · 397 阅读 · 0 评论 -
#301 – 使用Access 键(Using Access Keys)
Access 键是指将键盘上的某个分配个拥有关联文本Label的控件的按键。Access 键运行用户通过键盘而非鼠标激活控件。Access 键通过ALT+某个键来触发。当你按住或者点击ALT键的时候,当前窗口下所有支持的Access 键,都会通过下划线显示出来。下面是一个刚刚打开的窗口,没有按住ALT键,Access 键并没有显示。当你按住ALT后,窗口上所有支持的Access 键翻译 2016-09-23 15:31:07 · 463 阅读 · 0 评论 -
#297 – 为图像或者控件创建镜像(Create a Mirror Image of a Control or Image)
你可以用WPF中的2D缩放变换实现翻转图像或者控件。缩放功能是通过ScaleTransform 类来实现的。你使用它可以对任何图像或者控件在X和Y方向进行缩放。ScaleTransform 的ScaleX 和ScaleY 属性表示水平和垂直方向上的缩放因子。通常情况下它们是正数,但是我们可以使它们负数值来是控件或者图像在对应的方向上翻转。下面的例子中,我们通过ScaleX=0.5 这样翻译 2016-09-22 16:39:51 · 1008 阅读 · 0 评论 -
#277 – 显示图片的时候注意图片自己的Dpi信息(Images May Have Embedded DpiX and DpiY Information)
当你使用Image 控件显示图片的时候,即使将Stretch=None,有的时候你会发现图片显示的并不是按照你想要的像素显示。造成这种现象的原因可能是因为图片自己的分辨率(DPI)和你当前的系统的DPI不匹配。一个图像文件(例如.jpg或者.png文件),包含有图像的宽和高的信息,同时也可能包含有图像自己的DpiX和DpiY(分辨率)信息。并不是图像文件都有这个分辨率信息。下面介绍的是翻译 2016-09-19 17:57:20 · 2278 阅读 · 0 评论 -
#273 – 通过Image 控件显示图片(Display a Picture Using an Image Control)
Image 控件允许用户在界面上显示包括.png, .jpg, .gif, .bmp, .ico, .wdp, or .tiff等类型图像。通过设置它的Source 属性使Image 控件能够找到图片。下面的例子中,通过一个URI将Source 属性指向一个.jpg的图像文件,或者一个唯一的资源标识符。<Window Width="400" Height="300">翻译 2016-09-18 18:22:29 · 948 阅读 · 0 评论 -
#269 – 根据内容自动改变窗口的大小(Automatically Sizing a Window to Fit Its Contents)
通常我们可以通过设置Width 和Height 属性来设置WPF窗口的宽度和高度。运行后,窗口一开始显示的大小就是设置的大小。但是如果你想让窗口根据里面的内容自动调整大小,那么你可以设置窗口的SizeToContent 属性。默认情况下这个属性的值为Manual,窗口的大小将有手动设置的Width 和Height 属性决定。(不考虑设置窗口最大/最小尺寸大小属性)设置Size翻译 2016-09-14 14:13:53 · 1143 阅读 · 0 评论 -
#266 – 指定FontSize的值(Specifying Values for FontSize)
当使用FontSize 属性为字符指定字体大小的时候,你可以使用以下不同的单位。 -WPF与设备无关单位——1/96 英寸 = 1 像素 (96 dpi) -点(Points)——传统度量单位,1/72英寸 -英寸(Inches) -厘米(Centimeters)字体将根据设置的值显示下面是一些在不同单位和值的情况下的例子:8 pt - Sphinx of black翻译 2016-09-12 18:24:45 · 534 阅读 · 0 评论 -
#339 – 是按钮上的文字换行显示(Wrapping a Button’s Text Content to Multiple Lines)
当Button 控件的大小是根据内容自适应的时候,它的大小将根据内容调整为完全显示说有文字,但是这样显示的文字只用一行显示。<Button Content="Click me if you want to see something cool. In fact, click as many times as you like." HorizontalAlignment="Ce翻译 2016-10-11 17:01:28 · 3548 阅读 · 0 评论 -
#176 – Two Kinds of Templates(两种模板)
在WPF中,有两种类型的模板——控件模板(ControlTemplate)和数据模板(DataTemplate)控件模板运行用户精确的指定构造一个控件的可视树。下面的例子显示一个由按钮控件,该控件由一个Button和两个Label控件组成。翻译 2016-08-07 16:49:09 · 439 阅读 · 0 评论 -
#177 – A Content Presenter Is a Placeholder for a Content Control’s Content
ContentPresenter 是用来显示 ContentControl内容的。在WPF中,ContentControl 用来显示单一区域的内容的控件。该控件有用来描述自己特定可视树的控件模板(Template 属性)。在它的可视树中有内容的显示者(ContentPresenter),用来显示控件实际内容。翻译 2016-08-07 17:12:14 · 290 阅读 · 0 评论 -
#180 – How Layout Works(WPF布局如何工作)
WPF的布局就是WPF容器(例如Grid, StackPanel)如何排列显示其子控件(例如Button, Label)的过程。容器会按照已经定义好的渲染方式计算出每个子控件的最终大小和位置。当容器首次被渲染或者子控件中某个能够影响布局变化的属性发生改变的时候,布局处理程序就会被触发。翻译 2016-08-08 10:22:19 · 624 阅读 · 0 评论 -
#197 – Override Application Class Methods for Standard Events(为Application类的标准事件重写方法)
我们已经提到过Application类的一些主要事件,例如Startup, Exit 和SessionEndin。除了为Application.SessionEnding 事件添加响应函数以外,我们还可以只重写OnSessionEnding 方法就可以完成对SessionEnding 事件的处理。这种方式对继承自Application的类来说更加方便合适。不需要在 App.xaml 和App.xaml.cs中指定处理函数,只需要在App.xaml.cs中添加重写的代码即可。翻译 2016-08-08 15:04:19 · 412 阅读 · 0 评论 -
#256 – 使用FixedDocument 在指定的地方显示内容(Use a FixedDocument to Display Content at Fixed Locations)
FlowDocument 会自动的根据显示的内容进行分页,而FixedDocument 可以控制分页,你可以一页页的添加内容,并指定内容显示在某一页。FixedDocument 里面会包含若干个PageContent 实例,每个PageContent 实例中都包含FixedPage 实例。翻译 2016-09-09 18:02:29 · 1940 阅读 · 0 评论 -
#258 – RichTextBox 比TextBox允许显示更丰富的文本格式(RichTextBox Allows Richer Formatting than TextBox)
TextBox 允许你设置很多属性去改变显示的文本的字体等信息。但是如果你想对让文本中的某一部分进行特别的格式设置,那么你就需要用到RichTextBox 控件。RichTextBox 控件只能有一个子元素,这个子元素必须是FlowDocument类型的实例。你可以通过设置RichTextBox 的Document 属性为其设置子元素。下面是一个简单的例子,用来比较TextBox 和Ric翻译 2016-09-12 10:17:29 · 831 阅读 · 0 评论 -
#255 – 在FlowDocument中使文本环绕图片显示(Flow Text Around an Image in a FlowDocument)
在FlowDocument 中,可以使用Floater 将文本环绕用户控件显示。一般可以用来使文本环绕图片显示。将Floater 作为包含了需要显示的文本的Paragraph 的子元素。而下面是在FlowDocument 中使用Floater的部分代码。翻译 2016-09-09 15:25:13 · 2259 阅读 · 0 评论 -
#259 – 对使用OpenType 字体的文本进行排版(Setting Typography Properties for Text Rendered with an OpenType Font)
WPF有一个可以通过设置文本元素附加属性对文本进行排版的排版类Typography 。但是这些属性仅对使用 原文地址:https://wpf.2000things.com/2011/03/28/259-setting-typography-properties-for-text-rendered-with-an-opentype-font/翻译 2016-09-12 16:10:30 · 634 阅读 · 0 评论 -
#173 – 可以将将Freezable类型的(You Can Put Freezable Objects Into a Read-Only State)
继承自Freezable 的类一般有读/写两种状态,但是他们可以很明确的通过其Freeze 方法冻结并被设置为只读状态。在WPF中,被冻结的类执行起来会更有效率,因为他们不需要在其属性值改变的时候做属性通知。例如WPF中绘图相关的Brush和3D图形,它们继承自 Freezable. 他们初始的状态是未冻结的,因它们的任何一个改变都会引起属性改变的通知。如果你有一个继承自 Freezable的实例,但是你并不想改变它,你可以使用Freeze 将之冻结。翻译 2016-07-30 14:36:52 · 584 阅读 · 0 评论 -
#200 – 窗体间的父子从属关系(Parent/Child Relationships Between Windows)
创建一个窗口并使用它的Show 方法显示这个窗口,将可以使这个窗口的显示不依赖已经存在窗口(非模式对话框)。新的窗口将在任务栏上有自己的icon,也可以自己独立最大化和最小化。(也就是说这个新的窗口和创建它的窗口将没有任何关系——译者注)翻译 2016-08-10 11:15:07 · 889 阅读 · 0 评论 -
#205 – (WPF GUI管道)The WPF GUI Pipeline
在WPF中,有很多不同的子元素和动作执行者影响数据或者内容的显示。这些元素可以被看做是一个“管道”。数据流从管道的一端进入,GUI界面元素将从管道另外一端输出。这些在管道中的元素包括: -数据绑定(Data binding )和一个或者多个控件绑翻译 2016-08-12 10:27:43 · 1442 阅读 · 0 评论 -
#215 – Other Choices for Gradient Spreads Outside the Fill Area
渐变过程中关于超出渐变区域的处理如果在使用渐变的时候,渐变区域的开始和结束点在一条直线上,超出渐变区域的地方如何显示,将通过SpreadMethod 属性来控制。翻译 2016-08-17 11:33:08 · 293 阅读 · 0 评论 -
#221 – Changing a Brush at Run-Time(在Run-Time的时候改变画刷)
我们可以在Run-Time的时候改变Brush的外观属性,例如它的颜色,那么任何使用这个Bursh的控件也会自动的随着改变。假如我们有若干个使用了SolidColorBrush 的控件 上面的代码中定义了一个红色的SolidColorBrush,而且有一个Button,一个Label和一个Ellipse使用了这个SolidColorBrus翻译 2016-08-18 16:44:32 · 583 阅读 · 0 评论 -
#342 – 将Button 和Command绑定(Binding a Button to a Command)
在WPF中,按钮点击操作执行后要执行的代码通常使用命令(command)的方式来实现。命令(command)表示一个即将执行的操作,并为这个操作指定了一个特定的方法。按钮可以通过设置其Command 属性为其绑定关联的命令。下面是一个例子:ApplicationCommands.Open 是一个预定义好的命令,你通过在父窗口中添加一个新的CommandBinding 实例到Comma翻译 2016-10-11 18:16:47 · 3494 阅读 · 0 评论