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

附加依赖属性是WPF中使用频率较高的一种技术,可以用于从外部控制控件样式等外观相关内容。先将WPF中的依赖属性及其结构回顾一下。

依赖属性的类型全部都是静态成员 DependencyProperty,包含了名称、数据类型、属性所有者等信息。每个依赖属性还有一个名称以“XXXProperty”形式命名的静态实例,相当于依赖属性的标识符,用于设置、读取此属性值。

附加依赖属性可以附加到除了依赖属性所有者以外的对象上,并且只要提供给属性一个名字,这个属性就能够像对象上的普通属性那样被访问和使用。在XAML文件中,可以使用命名空间来引用包含了自定义的依赖属性的类。

一、创建依赖属性

在WPF应用程序中创建自定义依赖属性的步骤:

  1. 创建和注册 DependencyProperty
  2. 创建附加属性的 GetSet 方法
  3. 在控件中应用附加属性

1. 创建和注册 DependencyProperty

public static readonly DependencyProperty MyDependencyProperty =
    DependencyProperty.RegisterAttached(
        "MyDependency",
        typeof(string),
        typeof(MainWindow),
        new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));

上面的代码中,我们创建了一个名为MyDependency的附加依赖属性,其数据类型为string,拥有者typeof(MainWindow)表示此属性是MainWindow类型的附加依赖属性。

FrameworkPropertyMetadataOptions.AffectsMeasureFrameworkPropertyMetadataOptions.AffectsArrange表示当属性值变更时,会影响大小和排列。

2. 创建附加属性的 Get 和 Set 方法

public static string GetMyDependency(DependencyObject obj)
{
    return (string)obj.GetValue(MyDependencyProperty);
}

public static void SetMyDependency(DependencyObject obj, string value)
{
    obj.SetValue(MyDependencyProperty, value);
}

这里分别创建了GetSet方法,用于获取属性值和设置属性值,都是静态方法,上面的语法GetValueSetValue是依赖属性的两个方法,用于获取和设置属性值。

3. 在控件中应用附加属性

在XAML文件中,可以使用命名空间来引用包含了自定义的依赖属性的类,语法如下:

xmlns:local="clr-namespace:WpfApplication1"

<Button local:MainWindow.MyDependency="测试依赖属性" Content="测试附加依赖属性"/>

其中,xmlns:local="clr-namespace:WpfApplication1"表示定义一个名为“inlcude”的命名空间,将 local 映射到 WpfApplication1 命名空间。

local:MainWindow.MyDependency="测试依赖属性"表示将 MyDependency 属性值在 MainWindow 类型上应用到某个控件上。

二、应用依赖属性

我们通过一个例子来说明如何应用依赖属性。

  1. 创建一个自定义控件 CustomLabel
public class CustomLabel : Label
{
    public static readonly DependencyProperty MyDependencyProperty =
        DependencyProperty.RegisterAttached(
            "MyDependency",
            typeof(string),
            typeof(CustomLabel),
            new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));

    public static string GetMyDependency(DependencyObject obj)
    {
        return (string)obj.GetValue(MyDependencyProperty);
    }

    public static void SetMyDependency(DependencyObject obj, string value)
    {
        obj.SetValue(MyDependencyProperty, value);
    }
}
  1. 在XAML文件中应用附加属性
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <local:CustomLabel local:CustomLabel.MyDependency="测试附加依赖属性" Content="附加依赖属性演示"/>
        </StackPanel>
    </Grid>
</Window>

CustomLabel 控件上使用 MyDependency 属性,其中 local:CustomLabel.MyDependency="测试附加依赖属性" 表示将 MyDependency 属性在 CustomLabel 类型上应用到控件上。控件的内容“附加依赖属性演示”将会显示出来。

使用依赖属性确实能让你在开发WPF程序时更容易,也提高了你的UI最大程度的灵活性。掌握它经验是非常有用的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# wpf如何附加依赖项属性 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#实现多线程的同步方法实例分析

    C#实现多线程的同步方法实例分析 什么是多线程同步? 多线程同步是指多个线程同时访问共享资源时,保证它们的执行顺序符合我们的期望,避免因多线程访问导致资源竞争而导致的程序错误。 常见的多线程同步方法 常见的多线程同步方法包括:锁机制、信号量、互斥体、事件等。 锁机制 锁机制是通过一种约定俗成的方式,确保同一时刻只有一个线程能够访问共享资源。通常我们使用 lo…

    C# 2023年5月15日
    00
  • .NET Core 2.0 Preview2 发布汇总

    .NET Core 2.0 Preview2 发布汇总 简介 .NET Core 2.0 Preview2 是微软推出的基于 .NET Core 的第 二个预览版,其中包括了很多新特性、增强功能,同时也修复了一些已知问题和 bug 。 主要更新内容 .NET 标准库的版本升级到 2.0。 重新设计和重构了开发工具链,包括 .NET Core SDK 和 .N…

    C# 2023年6月3日
    00
  • .Net弹性和瞬态故障处理库Polly介绍

    下面就给您详细讲解一下”.Net弹性和瞬态故障处理库Polly介绍”,这是一款.net生态中十分优秀的库,能够让开发者更好的处理瞬态故障和弹性处理,提高开发效率和用户体验。 Polly简介 什么是Polly? Polly(Polly.Extensions.Http)基于.NET Standard和.NET Core。Polly是.NET弹性和瞬态故障处理库,…

    C# 2023年5月15日
    00
  • C#实现根据字节数截取字符串并加上省略号的方法

    当我们需要在页面上展示一篇文章标题或者一段文字时,经常会遇到字数过多的情况。这时候我们可以使用 C# 实现的截取字符串的方法来实现并在尾部加上省略号,提高用户体验。 下面是实现的完整攻略: 1.确定要截取的字节数 首先需要确定截取的字节数。这里需要注意的是一个汉字在 utf-8 编码下占用三个字节,而在 gb2312/GBK 编码下占用两个字节。因此我们需要…

    C# 2023年6月8日
    00
  • 分享WCF文件传输实现方法—WCFFileTransfer

    WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。WCF可以用于实现各种功能,包括文件传输。本文将介绍如何使用WCF实现文件传输,并分享一个名为WCFFileTransfer的示例项目。 WCFFileTransfer项目介绍 WCFFileTransfer是一个使用WCF实现文件传输的示例项目。该…

    C# 2023年5月15日
    00
  • C#中使用DataContractSerializer类实现深拷贝操作示例

    下面是关于“C#中使用DataContractSerializer类实现深拷贝操作示例”的完整攻略: 1. 什么是深拷贝? 深拷贝和浅拷贝是常用的两种对象复制方式。 浅拷贝指的是对于某个对象,只复制其基本类型数据(比如int、float、string等),而将其引用类型数据(比如对象)的引用复制给新对象。 深拷贝则是对某个对象进行复制时,将其引用类型数据也一…

    C# 2023年5月31日
    00
  • C#请求http向网页发送接收数据的方法

    下面是“C#请求http向网页发送接收数据的方法”的完整攻略。 使用HttpClient发送HTTP请求 C#中可以使用HttpClient对象发送HTTP请求,该对象位于System.Net.Http命名空间中。 首先需要在C#项目中引入System.Net.Http命名空间: using System.Net.Http; 然后创建HttpClient对象…

    C# 2023年5月31日
    00
  • .NET 日志系统设计思路及实现代码

    概述 在.NET应用程序的开发过程中,日志系统往往是必不可少的一环。良好的日志系统可以帮助我们更快速地发现问题所在,提高应用程序的质量。本攻略主要讲解在.NET应用程序中设计日志系统的思路及实现代码。 设计思路 在设计.NET日志系统时,我们需要考虑以下几个方面: 级别设置:一般来说,我们需要将日志分为不同的级别,例如debug、info、warn、erro…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部