iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c# wpf如何附加依赖项属性
  • 635
分享到

c# wpf如何附加依赖项属性

2024-04-02 19:04:59 635人浏览 独家记忆
摘要

  附加依赖项属性是一个属性本来不属于对象自己,但是某些特定场景其他的对象要使用该对象在这种场景下的值。这个值只在这个场景下使用。基于这个需求设计出来的属性。这里主要涉及到一个解耦问

  附加依赖项属性是一个属性本来不属于对象自己,但是某些特定场景其他的对象要使用该对象在这种场景下的值。这个值只在这个场景下使用。基于这个需求设计出来的属性。这里主要涉及到一个解耦问题。最大的优势是在特定场景下使用的属性,可以在特定场景下定义。这样业务上不会导致代码全部混在某个模块里。提升代码可维护性。

  我们举例一段代码。假设有个类Person。包含了身份ID(IdentityID),姓名(Name),出生年月(Birth date),性别(gender),民族(Nation)。 有一个School类,包含了年级(grade)。我们把用户所在的年纪通过依赖项属性的形式从Person类中解耦出去。这样就可以更好的设计业务的关联关系。

  我们创建继承自DependencyObject的School类。使用propa 快捷方式创建属性。我们给School添加了一个附加依赖项属性GradeProperty。

代码如下:


public class School : DependencyObject
 { 
  public static int GetGrade(DependencyObject obj)
  {
   return (int)obj.GetValue(GradeProperty);
  }

  public static void SetGrade(DependencyObject obj, int value)
  {
   obj.SetValue(GradeProperty, value);
  }

  // Using a DependencyProperty as the backing store for Grade. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty GradeProperty =
   DependencyProperty.ReGISterAttached("Grade", typeof(int), typeof(School), new PropertyMetadata(0));
 }

  我们继续创建Person类,使用propdp创建。因为我们已经学习了依赖项属性,所以我们只使用依赖项属性来创建所有Person下的属性对象。


public class Person : DependencyObject
 {
  public string IdentityID
  {
   get { return (string)GetValue(IdentityIDProperty); }
   set { SetValue(IdentityIDProperty, value); }
  }

  // Using a DependencyProperty as the backing store for IdentityID. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty IdentityIDProperty =
   DependencyProperty.Register("IdentityID", typeof(string), typeof(Person));

  public string Name
  {
   get { return (string)GetValue(NamePropertyProperty); }
   set { SetValue(NamePropertyProperty, value); }
  }

  // Using a DependencyProperty as the backing store for NameProperty. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty NamePropertyProperty =
   DependencyProperty.Register("Name", typeof(string), typeof(Person)); 

  public DateTime BirthDate
  {
   get { return (DateTime)GetValue(BirthDateProperty); }
   set { SetValue(BirthDateProperty, value); }
  }

  // Using a DependencyProperty as the backing store for BirthDate. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty BirthDateProperty =
   DependencyProperty.Register("BirthDate", typeof(DateTime), typeof(Person)); 

  public bool Gender
  {
   get { return (bool)GetValue(GenderProperty); }
   set { SetValue(GenderProperty, value); }
  }

  // Using a DependencyProperty as the backing store for Gender. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty GenderProperty =
   DependencyProperty.Register("Gender", typeof(bool), typeof(Person)); 

  public string Nation
  {
   get { return (string)GetValue(NationProperty); }
   set { SetValue(NationProperty, value); }
  }

  // Using a DependencyProperty as the backing store for Nation. This enables animation, styling, binding, etc...
  public static readonly DependencyProperty NationProperty =
   DependencyProperty.Register("Nation", typeof(string), typeof(Person));
   
 }

  我们创建一个按钮来给Person设置一个附加依赖项属性。学校的年级。

xaml代码和对应的cs代码:


 <Button Content="点击给Pserson对象在对应的业务上附加依赖性属性" Click="AddPsersonAttachedProperty_Click"/>

private void AddPsersonAttachedProperty_Click(object sender, RoutedEventArgs e)
  {
   Person person = new Person();
   School.SetGrade(person, 1);
   var grade = School.GetGrade(person);
   MessageBox.Show(grade.ToString()) ;
  }

我门通过点击按钮创建了一个Person对象。使用School.SetGrade(person,1)来调用了我门添加在School类下面的附加依赖项属性。我门给Person设置了附加依赖项属性,是School下的Grade依赖项属性值为1。关键点:附加依赖项属性的适用场景是给当前对象添加在某些场景下使用的属性值。  这个时候我们可以使用School.GetGrade(person)读取这个对象中的依赖项属性。依赖项属性理解到这里就行。Grid和子元素在Grid中放置行列的原理和这个对依赖项属性使用是一样的。只是有一些后续的逻辑。目前只要会使用能看懂就好。后续会在自定义控件中,设计自己的布局呈现控件时,在设计阶段讲解哪些应该使用依赖项属性,哪些使用附加依赖项属性。

用一个通过附加属性移动Slider控制小球在canvas下的例子。 给一个不存在Left 和top属性的小球。添加一个在父容器canvas的附加依赖属性,用来控制小球在Canvas下的位置。附加依赖项属性,主要用于解耦。这篇文章就结束拉。


 <Canvas>
    <Slider x:Name="sliderX" Canvas.Top="10" Canvas.Left="10" Width="200" Minimum="50" Maximum="200"/>
    <Slider x:Name="sliderY" Canvas.Top="40" Canvas.Left="10" Width="200" Minimum="50" Maximum="200"/>
    <Ellipse Fill="Blue" Width="30" Height="30" Canvas.Left="{Binding ElementName=sliderX,Path=Value}" Canvas.Top="{Binding ElementName=sliderY,Path=Value}"/>
   </Canvas>

我们使用Canvas作为画板,在里面放入2个Slider一个控制水平位置,一个控制垂直位置。我们通过绑定Slider的Value到Ellipse在Canvas下的附加依赖项属性Canvas.Left和Canvas.Top来

控制小球的垂直和水平位置。来演示如何解耦Ellipse和canvas的布局关系。通过前面了解的的binding、依赖项属性和附加依赖项属性,发现写代码的思路是不是一下就改变了很多?耦合正在慢慢的从设计层就变低了。

以上就是C# WPF如何附加依赖项属性的详细内容,更多关于c# wpf附加依赖项属性的资料请关注编程网其它相关文章!

--结束END--

本文标题: c# wpf如何附加依赖项属性

本文链接: https://www.lsjlt.com/news/122508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c# wpf如何附加依赖项属性
      附加依赖项属性是一个属性本来不属于对象自己,但是某些特定场景其他的对象要使用该对象在这种场景下的值。这个值只在这个场景下使用。基于这个需求设计出来的属性。这里主要涉及到一个解耦问...
    99+
    2024-04-02
  • WPF依赖属性怎么使用
    这篇文章主要介绍“WPF依赖属性怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“WPF依赖属性怎么使用”文章能帮助大家解决问题。一、什么是依赖属性依赖属性就是一种自己可以没有值,并且可以通过绑...
    99+
    2023-06-29
  • WPF依赖属性用法详解
    一、什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。 将所有的属性都设置为依赖属性...
    99+
    2024-04-02
  • C# wpf利用附加属性实现界面上定义装饰器
    目录前言一、如何实现1、实现装饰器2、定义附加属性3、加入装饰层二、完整代码三、使用示例总结前言 装饰器是wpf中可以浮在控件上面的一种组件,我们通常可以用来实现一些诸如控件拖动点、...
    99+
    2022-12-16
    C# wpf界面定义装饰器 C# wpf 定义装饰器 C# wpf 装饰器
  • VS中PCL库附加依赖项配置过程解析
    在VS中使用PCL库通常要经过一些配置,参考https://www.jb51.net/article/256416.htm教程中第一部分PCL安装及在VS2013中使用PCL。 其中...
    99+
    2024-04-02
  • maven如何添加ajax依赖
    要添加Ajax依赖,你需要在Maven的pom.xml文件中添加相应的依赖项。以下是一个添加Ajax依赖的示例:```xml...j...
    99+
    2023-08-26
    maven ajax
  • eclipse如何添加maven依赖
    在Eclipse中添加Maven依赖,可以通过以下步骤操作:1. 打开Eclipse,找到你的Maven项目,然后右键点击项目名称,...
    99+
    2023-08-26
    eclipse maven
  • idea如何加载maven依赖
    要加载Maven依赖,可以按照以下步骤进行操作:1. 在pom.xml文件中添加依赖项。在项目的pom.xml文件中,找到标签,然后...
    99+
    2023-08-08
    idea maven
  • spark如何添加依赖包
    这篇文章主要为大家展示了“spark如何添加依赖包”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spark如何添加依赖包”这篇文章吧。spark-shell 添加依赖包 spark-1...
    99+
    2023-06-26
  • C#中wpf怎么利用附加属性实现界面上定义装饰器
    这篇文章主要介绍了C#中wpf怎么利用附加属性实现界面上定义装饰器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中wpf怎么利用附加属性实现界面上定义装饰器文章都会有所收获,下面我们一起来看看吧。前言装饰器...
    99+
    2023-07-04
  • Laravel和PHP:如何在项目中高效加载依赖项?
    在现代的Web应用程序开发中,依赖项管理是一个至关重要的问题。在PHP生态系统中,Composer是最常用的依赖项管理工具。Laravel框架也使用Composer来管理其依赖项。在本文中,我们将探讨如何在Laravel项目中高效加载依赖...
    99+
    2023-07-24
    load laravel git
  • 解决WPF附加属性的Set函数不调用的问题
    今天写程序的时候用到了附加属性,我是用VS内置的propa的代码段来实现的,代码如下: class Attach { public static bo...
    99+
    2024-04-02
  • Maven如何管理项目依赖
    Maven 是一个项目管理工具,可以用来管理项目的构建、依赖等。在 Maven 中,项目的依赖关系通过一个名为 pom.xml 的配...
    99+
    2024-04-09
    Maven
  • 如何使用replace属性来避免Composer的依赖冲突
    这篇文章将为大家详细讲解有关如何使用replace属性来避免Composer的依赖冲突,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Composer 文档提供了两个基本的示例。 我将尝试解释一下:列出被该...
    99+
    2023-06-09
  • Composer 如何管理依赖项更新?
    composer 使用语义版本控制 (semver) 来管理依赖项更新,遵循主版本号、次版本号和修订版本号结构。composer 允许指定依赖项的版本约束,仅更新符合该范围的依赖项。安装...
    99+
    2024-05-13
    依赖管理 composer
  • C++ 单元测试中如何模拟外部依赖项?
    在 c++++ 中模拟外部依赖项有三种方法:1. 桩(预定义行为),2. 存根(记录调用),3. 注入(作为参数传递模拟)。通过桩、存根和注入,可以隔离组件并创建健壮的单元测试。 C+...
    99+
    2024-04-24
    单元测试 模拟依赖 c++
  • 如何使用go工作区在本地加载依赖项?
    php小编百草为你介绍如何使用go工作区在本地加载依赖项。在开发Go语言项目时,我们经常会使用到各种第三方库和依赖项。为了方便管理和加载这些依赖项,Go语言提供了一个强大的工作区(wo...
    99+
    2024-02-09
    go语言
  • 可下载的依赖项如何辨别?
    从现在开始,努力学习吧!本文《可下载的依赖项如何辨别?》主要讲解了等等相关知识点,我会在编程网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!...
    99+
    2024-04-04
  • C#中如何实现依赖注入
    在C#中实现依赖注入通常可以使用一些现成的框架,比如ASP.NET Core中自带的依赖注入容器。以下是一个简单的示例: 首先,定义...
    99+
    2024-04-03
    C#
  • SpringBoot集成Swagger如何添加maven依赖
    这篇文章主要介绍了SpringBoot集成Swagger如何添加maven依赖,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SpringBoot集成Swagger 添加mav...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作