当前位置: 首页 > news >正文

海外微网站建设个人网页设计作品模板代码怎么写

海外微网站建设,个人网页设计作品模板代码怎么写,免费网站安全检测,大学网站模板下载四、 只读依赖属性 在以前在对于非WPF的功能来说#xff0c;对于类的属性的封装中#xff0c;经常会对那些希望暴露给外界只读操作的字段封装成只读属性#xff0c;同样在WPF中也提供了只读属性的概念#xff0c;如一些 WPF控件的依赖属性是只读的#xff0c;它们经常用于…四、 只读依赖属性   在以前在对于非WPF的功能来说对于类的属性的封装中经常会对那些希望暴露给外界只读操作的字段封装成只读属性同样在WPF中也提供了只读属性的概念如一些 WPF控件的依赖属性是只读的它们经常用于报告控件的状态和信息像IsMouseOver等属性 那么在这个时候对它赋值就没有意义了。 或许你也会有这样的疑问为什么不使用一般的.Net属性提供出来呢一般的属性也可以绑定到元素上呀这个是由于有些地方必须要用到只读依赖属性比如 Trigger等同时也因为内部可能有多个提供者修改其值所以用.Net属性就不能完成天之大任了。   那么一个只读依赖属性怎么创建呢其实创建一个只读的依赖属性和创建一个一般的依赖属性大同小异。不同的地方就是DependencyProperty.Register变成了DependencyProperty.RegisterReadOnly。和前面的普通依赖属性一样它将返回一个 DependencyPropertyKey。而且只提供一个GetValue给外部这样便可以像一般属性一样使用了只是不能在外部设置它的值罢了。 下面我们就用一个简单的例子来概括一下 public partial class WindowReadOnly : Window{public WindowReadOnly (){InitializeComponent();//用SetValue的方法来设置值DispatcherTimer timer new DispatcherTimer(TimeSpan.FromSeconds(1),DispatcherPriority.Normal,(object sender, EventArgs e){int newValue Counter int.MaxValue ? 0 : Counter 1;SetValue(counterKey, newValue);},Dispatcher);}//属性包装器只提供GetValuepublic int Counter{get { return (int)GetValue(counterKey.DependencyProperty); }}//用RegisterReadOnly来代替Register来注册一个只读的依赖属性private static readonly DependencyPropertyKey counterKey DependencyProperty.RegisterReadOnly(Counter,typeof(int),typeof(WindowReadOnly),new PropertyMetadata(0));}        XAML代码 Window x:NamewinReadOnly x:ClassWpfApp1.WindowReadOnlyxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlTitleWindowDepend Height300 Width300GridViewboxTextBlock Text{Binding ElementNamewinReadOnly, PathCounter} //Viewbox/Grid /Window     效果如下图所示    五、 附加属性       现在我们再继续探讨另外一种特殊的依赖属性——附加属性。附加属性是一种特殊的依赖属性。这是WPF的特性之一通俗的理解起来就是别人有的属性由于你跟他产生了关系所以你也有了这个属于他的属性。       附加属性是说一个属性本来不属于某个对象但由于某种需求而被后来附加上也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性附加属性的作 用就是将属性与数据类型解耦让数据类型的设计更加灵活举例一个TextBox被放在不同的布局容器中时就会有不同的布局属性这些属性就是由布局容 器为TextBox附加上的附加属性的本质就是依赖属性二者仅仅在注册和包装器上有一点区别。         附加属性是依赖属性的一种特殊形式它可以让用户在一个元素中设置其他元素的属性。一般来说附加属性是用于一个父元素定位其他元素布局 的。就像Grid和DockPanel元素就包含附加属性。Grid使用附加属性来指定包含子元素的特定行和列而DockPanel使用附加属性是来指 定子元素应该停靠在面板中的何处位置。       附加属性就是自己没有这个属性在某些上下文中需要就被附加上去。比如StackPanel的Grid.Row属性如果我们定义StackPanel类时定义一个Row属性是没有意义的因为我们并不知道一定会放在Grid里这样就造成了浪费。 例如下面转场控件的定义使用了Grid的Row属性来将自身定位到特定的行中。 GridGrid.RowDefinitionsRowDefinition Height101*/RowDefinition Height80/RowDefinition Height80//Grid.RowDefinitionsStackPanel Grid.Row0          尽管对于一个普通的WPF开发人员来说理解依赖和附加属性并不一定是必须的但是掌握好WPF系统的整个运行机制对于提升WPF应用技术是非常重要的。      使用附加属性可以避开可能会防止一个关系中的不同对象在运行时相互传递信息的编码约定。一定可以针对常见的基类设置属性以便每个对象只需获取和 设置该属性即可。但是你可能希望在很多情况下这样做这会使你的基类最终充斥着大量可共享的属性。它甚至可能会引入以下情况在数百个后代中只有两个 后代尝试使用一个属性。这样的类设计很糟糕。为了解决此问题我们使用附加属性概念来允许对象为不是由它自己的类结构定义的属性赋值。在创建对象树中的各 个相关对象之后在运行时从子对象读取此值。   最好的例子就是布局面板。每一个布局面板都需要自己特有的方式来组织它的子元素。如Canvas需要Top和left来布 局DockPanel需要Dock来布局。当然你也可以写自己的布局面板在上一篇文章中我们对布局进行了比较细致的探讨如果有不清楚的朋友也可以再 回顾一下。     下面代码中的Button 就是用了Canvas的Canvas.Top和Canvas.Left20 来进行布局定位那么这两个就是传说中的附加属性。 CanvasButton Canvas.Top20 Canvas.Left20 ContentKnights Warrior!/ /Canvas     定义附加属性的方法与定义依赖属性的方法一致前面我们是使用DependencyProperty.Register来注册一个依赖属性只是在注册属性时使用的是RegisterAttach()方法。这个RegisterAttached的参数和 Register是完全一致的那么Attached附加这个概念又从何而来呢   其实我们使用依赖属性一直在Attached附加。我们注册构造一个依赖属性然后在DependencyObject中通过 GetValue和SetValue来操作这个依赖属性也就是把这个依赖属性通过这样的方法关联到了这个DependencyObject上只不过是 通过封装CLR属性来达到的。那么RegisterAttached又是怎样的呢 下面我们来看一个最简单的应用首先我们注册构造一个附加属性 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Media;namespace WpfApp1.Services{public class TurnoverManager : DependencyObject{//通过静态方法的形式暴露读的操作public static double GetAngle(DependencyObject obj){return (double)obj.GetValue(AngleProperty);}//通过静态方法的形式暴露写的操作public static void SetAngle(DependencyObject obj, double value){obj.SetValue(AngleProperty, value);}//通过使用RegisterAttached来注册一个附加属性public static readonly DependencyProperty AngleProperty DependencyProperty.RegisterAttached(Angle, typeof(double), typeof(TurnoverManager), new PropertyMetadata(0.0, OnAngleChanged));//根据附加属性中的值当值改变的时候旋转相应的角度。private static void OnAngleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){var element obj as UIElement;if (element ! null){element.RenderTransformOrigin new Point(0.5, 0.5);element.RenderTransform new RotateTransform((double)e.NewValue);}} }}   然后我们在程序中使用这个我们自己定义的附加属性 Window x:ClassWpfApp1.WindowTurnoverxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localclr-namespace:WpfApp1.ServicesTitleWindowTurnover Height400 Width500 LoadedWindow_LoadedGridGrid.RowDefinitionsRowDefinition Height313*/RowDefinition Height57*//Grid.RowDefinitionsCanvas Grid.Row0Ellipse NameellipseRed FillRed Width100 Height60 Canvas.Left56Canvas.Top98 local:TurnoverManager.Angle{Binding ElementNamesliderAngle, PathValue}/Rectangle NameellipseBlue FillBlue Width80 Height80 Canvas.Left285Canvas.Top171 local:TurnoverManager.Angle45 /Button NamebtnWelcome Content欢迎光临 Canvas.Left265 Canvas.Top48 FontSize20 local:TurnoverManager.Angle60//CanvasWrapPanel Grid.Row1Label Content角度大小 /Slider x:NamesliderAngle Minimum0 Maximum240 Width300 //WrapPanel/Grid/Window 在XAML中就可以使用刚才注册构造的附加属性了如下图。 通过调整角度值显示不同的效果如下两图。图1图2。                                  图1                             图2     转载于:https://www.cnblogs.com/chillsrc/p/4661658.html
http://www.zqtcl.cn/news/824249/

相关文章:

  • 易语言做购物网站春节网站怎么做
  • 建公司网站设计网站公司做网上夫妻去哪个网站
  • 稷山网站建设wordpress单本小说采集
  • 凡客网站规划与建设ppt网站做跳转教程
  • 怎么看网站空间多大做网站旅游销售
  • 天津做手机网站建设旅游网站的目的
  • 飞机查询网站开发的创新点注册公司流程和费用大概多少钱
  • 高质量的邯郸网站建设厦门网页制作厦门小程序app
  • 建设企业网站企业网上银行官网官方二建证从住房建设厅网站调出流程
  • 网站开发和网站建设网页出现网站维护
  • 推广网站的方法电影网站建设教程
  • 哪些网站可以做相册视频成都企业网站公司
  • wordpress网站统计插件常见的管理信息系统有哪些
  • wordpress多个导航菜单seo引流软件
  • 建立网站需要多少钱怎么样企业邮箱在哪看
  • 网站主要功能2008服务器网站
  • 增城百度做网站多少钱it培训机构排名
  • 网站开发项目规划书四川建设网个人证书查询网址
  • 怎么模板建站微信做单30元一单
  • 兰州建设局网站十堰专业网站建设
  • html5 网站源码网络营销课程思政
  • 建设网站贵吗深圳网站建设推广论坛
  • 做网站需注意事项会员卡管理系统下载
  • 嘉兴高端网站建设公司电子信息工程能进国家电网吗
  • 建网站 广州网站改版 理论
  • 门户网站简称昆明本地网站
  • 网站定位的核心意义离婚协议书模板 完整版
  • 网站首页改版方案长图制作网站
  • 网站的栏目有什么名字保定网络公司网站
  • 南京建设机械网站建设银行网站解除绑定