首页 > 其他分享 >用户控件和自定义控件

用户控件和自定义控件

时间:2023-10-18 21:35:40浏览次数:25  
标签:控件 string 自定义 EmailProperty UserControl1 用户 public Email

用户控件和自定义控件的不同点

  1. 在XAML中构成用户控件的样子。
  2. 子控件需要暴露的依赖属性有2种用途:1. 显示 2. 赋值 3. 事件。

如何暴露属性?

将2种需要暴露的依赖属性定义成用户控件的新增的自定义依赖属性。

TextBox

Text = Binding,子控件Text 用户控件被赋值,文本框变,文本框变,用户控件变。(双向绑定)。 单向绑定。 用PropertyChangedCallBack事件去实现。

方式一:单向 + 数据绑定

<UserControl
    x:Class="用户控件的Name.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:用户控件的Name"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Name="uc"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <TextBlock Text="{Binding ElementName=uc, Path=Email, Mode=OneWay}" />
</UserControl>
public partial class UserControl1 : UserControl
{
    public string Email
    {
        get { return (string)GetValue(EmailProperty); }
        set { SetValue(EmailProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Email.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty EmailProperty =
        DependencyProperty.Register("Email", typeof(string), typeof(UserControl1), new PropertyMetadata(""));


    public UserControl1()
    {
        InitializeComponent();
    }
}

方式二:单向 + 回调

<UserControl
    x:Class="用户控件的Name.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:用户控件的Name"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Name="uc"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <TextBlock x:Name="textBlock" />
</UserControl>
public partial class UserControl1 : UserControl
{
    public string Email
    {
        get { return (string)GetValue(EmailProperty); }
        set { SetValue(EmailProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Email.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty EmailProperty =
        DependencyProperty.Register(nameof(Email), typeof(string), typeof(UserControl1), new PropertyMetadata("",new PropertyChangedCallback(EmailChanged)));

    private static void EmailChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var uc1 = d as UserControl1;
        uc1.textBlock.Text = System.Convert.ToString(e.NewValue);
    }

    public UserControl1()
    {
        InitializeComponent();
    }
}

方式三:双向

如何暴露事件?

事件在VisualTree上传播,所以大部分子控件的路由事件不需要二次封装成用户控件的路由事件。路由事件可以暴露出

标签:控件,string,自定义,EmailProperty,UserControl1,用户,public,Email
From: https://www.cnblogs.com/LiuwayLi/p/17773379.html

相关文章

  • 初学Bokeh:自定义标题【12】跬步
    初学Bokeh:自定义标题【12】跬步大多数绘图都包含标题(headline)。可以通过向figure()函数传递标题参数来为图像添加标题:p=figure(title="Headlineexample")标题文本有多种样式,示例如下:frombokeh.plottingimportfigure,show#preparesomedata#定义绘图数据x......
  • 将自定义的日志直接写入到 mysql 数据库
    将日志直接写入到MySQL数据库中可能会对性能产生影响。如果需要高性能的日志记录解决方案,则可以考虑使用专门的日志记录器,例如Elasticsearch、Logstash和Kibana(ELK)堆栈。安装MySQL数据库,并创建一个新的数据库和表来存储日志数据。使用MySQL连接器来连接到MySQL数据库。创建一个包含......
  • 大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求
    大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求一个面向多模式GPT-4级别能力构建的助手。它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解。LLaVA旨在更深入地理解和处理语言和视觉信息,从而实现更复杂的任务和对话。这个项目代表了下一......
  • 如何优雅地使用Spring Boot拦截器提升应用的用户体验?
    ......
  • app应用程序该如何封装,能提升产品价值和用户体验感
    哈喽各位同学们好,我是咕噜铁蛋,咱们又见面了。之前我和大家聊了好多苹果文件签名的小知识,今天咱们换个口味讲讲别的内容---封装。随着移动应用市场的蓬勃发展,用户对应用的期望也变得更高。一个成功的应用不仅仅要具备功能完善和界面美观的特点,还需要在用户体验和产品价值方面提供差......
  • cesium 自定义属性方法
    Cesium.Cesium3DTileset.prototype.setObjsColor=function(ids){letcurrentStyle=this.style&&this.style.style||{};this.style=newCesium.Cesium3DTileStyle({...currentStyle,color:{evaluateColor:function(......
  • 视频直播app源码,自定义View 线型EditText输入框
    视频直播app源码,自定义View线型EditText输入框publicclassLineEditTextextendsAppCompatEditText{  privatePaintmPaint;   /**   *@paramcontext   *@paramattrs   */  publicLineEditText(Contextcontext,AttributeSetattrs){ ......
  • 企业如何自定义人力资源和财务报表?
    企业自定义人力资源和财务报表是一种重要的能力,它允许企业根据其特定需求和目标创建和定制报表。以下是一些详细的步骤和说明,帮助企业实现人力资源和财务报表的自定义。1.确定报表需求:首先,企业需要明确自己对人力资源和财务报表的具体需求。这可能涉及到不同层级和部门的数据......
  • DevOps2023现状报告|注重文化、以用户为中心是成功的关键
    GoogleCloudDORA团队的一份新研究报告强调了企业文化和关注用户作为成功软件交付支柱的重要性。 2023DevOps状况报告分析了过去9年来通过此类最大规模调查收集的全球36,000多名IT专业人员的数据。今年的报告是继2022年调查之后发布的,该调查发现越来越多的人采用工......
  • 【问题记录】自定义注解处理程序 AbstractProcessor,总是提示版本不匹配
    1  前言最近在看注解处理程序,自己写一个 AbstractProcessor,发现有个莫名的提示:2 解决加上支持的版本即可,唉,折腾人。......