精华内容
下载资源
问答
  • 在创建用户控件时,我们难免会创建依赖项属性,这样有利于用户控件的灵活性,例如:我写了一个控件MenuButton,这个MenuButton就是为Button写了一个模板,Image用来显示图片,ContentPresenter用来显示文本。...

    在创建用户控件时,我们难免会创建依赖项属性,这样有利于用户控件的灵活性,例如:我写了一个控件MenuButton,这个MenuButton就是为Button写了一个模板,Image用来显示图片,ContentPresenter用来显示文本。我们肯定不是在用户控件中将图片和文字预先设置好,而是通过用户控件属性来设置,在这里说一些额外的话,建议用依赖项属性,因为依赖项属性支持例如:设计器集成、Binding、动画、样式、动态资源等,而属性则不支持的。看以下MenuButton.xaml代码片段:

    <UserControl x:Class="Jeriffe.SL.App.UserControlBinding.MenuButton"
         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:mc
    ="http://schemas.openxmlformats.org/markup-compatibility/2006"  
        xmlns:local
    ="clr-namespace:Jeriffe.SL.App.UserControlBinding"  
        mc:Ignorable
    ="d" >
        <UserControl.Resources>
            <Style x:Key="ButtonStyle" TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <Rectangle  x:Name="rectangle" Fill="#FFCCCCD6" 
                                            Height
    ="41" 
                                            RadiusX
    ="8"
                                            RadiusY
    ="8" 
                                            Stroke
    ="#FF5A5353"/>
                                <StackPanel Orientation="Horizontal">
                                    <Image  
                                        
    HorizontalAlignment="Center" 
                                        Height
    ="32" 
                                        Margin
    ="10,0,0,0" 
                                        Source
    ="{Binding Source}" 
                                        Stretch
    ="Fill" Width="32" 
                                        VerticalAlignment
    ="Center"/>
                                    <ContentPresenter  
                                        
    VerticalAlignment="Center"
                                        Width
    ="22" 
                                        Margin
    ="10,0" 
                                        Content
    ="{Binding Text}"/>
                                </StackPanel>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </UserControl.Resources>

        <Grid x:Name="LayoutRoot">
            <Button Style="{StaticResource ButtonStyle}"/>
        </Grid>
    </UserControl> 
    对应的MenuButton.xaml.cs代码片段:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;

    namespace Jeriffe.SL.App.UserControlBinding
    {
        public partial class MenuButton : UserControl
        {
            public MenuButton()
            {
                InitializeComponent();
               // this.DataContext = this;
            }

            public static readonly DependencyProperty SourceProperty =
                DependencyProperty.Register(
                                            "Source",
                                            typeof(ImageSource),
                                            typeof(MenuButton), 
                                            new PropertyMetadata(default(ImageSource)));
            public ImageSource Source
            {
                get { return (ImageSource)GetValue(SourceProperty); }
                set { SetValue(SourceProperty, value); }
            }
            public static readonly DependencyProperty TextProperty =
                DependencyProperty.Register(
                                            "Text",
                                            typeof(string),
                                            typeof(MenuButton),
                                            new PropertyMetadata(default(string)));
            public string Text
            {
                get { return (string)GetValue(TextProperty); }
                set { SetValue(TextProperty, value); }
            }
        }
    }

    那么我们如何将自定义的依赖项属性Source绑定到Image,Text绑定到Content上?且看如下3种方法:

    第一种方法:在XAML中为UserControl指定x:Name值,Binding通过ElementName进行绑定。 
    好吧,如上所说,我们为UserControl指定x:Name值,如下
    MenuButton.xaml文件: 

      ...... 

     xmlns:local="clr-namespace:Jeriffe.SL.App.UserControlBinding"

     mc:Ignorable="d"

     x:Name="UserControl_MenuButton"

    修改Image和ContentPresenter的Binding,代码如下(改动的代码是蓝色的): 
    MenuButton.xaml文件:
     

    <Image HorizontalAlignment="Center" 
            Height
    ="32" 
            Margin
    ="10,0,0,0" 
            Source
    ="{Binding ElementName=UserControl_MenuButton,Path=Source}" 
            Stretch
    ="Fill" 
            Width
    ="32" 
            VerticalAlignment
    ="Center"/>
    <ContentPresenter 
        
    VerticalAlignment="Center" 
        Width
    ="22" 
        Margin
    ="10,0" 
        Content
    ="{Binding ElementName=UserControl_MenuButton, Path=Text}"/>

    如上,就可以将依赖项属性Source和Text绑定到Image和ContentPresenter上。不过这种方式有一个致命的缺点就是:当这个自定义控件在同一个页面有1个以上时,偶尔会抛出已经定义UserControl_MenuButton异常。所以这种方式不可取。

    第二种方法:在MenuButton.xaml.cs中的MenuButton实例构造器中将this.DataContext=this;这样,其实和上一种实现的方式差不多,不过这样不用为UserControl指定x:Name值,也不会出现上面所提到的神马已经定义UserControl_MenuButton异常。看下面代码: 
    MenuButton.xaml.cs文件

    public MenuButton()
            {
                InitializeComponent();
                this.DataContext = this;
            }

    这种方法也不错,不过有的家伙比喜欢(不喜欢在后台写代码,能在XAML中实现的绝不在.cs文件中实现)。

    第三种方法:在XAML中设置UserControl的DataContext绑定自身。请看一下代码:

        ......
        xmlns:local="clr-namespace:Jeriffe.SL.App.UserControlBinding"  
        mc:Ignorable="d" 
        DataContext="{Binding RelativeSource={RelativeSource Self}}">

    好吧,有的童鞋可能不懂这种Binding的语法的意思,上链接:Binding.RelativeSource 属性

    原文摘自: 

    http://blog.csdn.net/wangwenzhuang/article/details/6434900 

    转载于:https://www.cnblogs.com/jeriffe/articles/2305475.html

    展开全文
  • 控件肯定会有显示数据功能,而大部分数据又会来自于外界,所以我们需要写一些依赖项属性好让外界把值赋过来。可是得到了值那么又怎么才能绑定它呢?其实很简单,就是在构造里写一句DataContext = this;然后xaml...

    在开发应用的时候,难免会制作一些用户控件什么的。控件肯定会有显示数据的功能,而大部分数据又会来自于外界,所以我们需要写一些依赖项属性好让外界把值赋过来。可是得到了值那么又怎么才能绑定它呢?其实很简单,就是在构造里写一句DataContext = this;   然后xaml里面在要绑定的地方写{Binding 属性名}就可以了。

     

    注:这样做存在问题

    在构造方法内对DataContext设置的话会覆盖外界给的DataContext导致外界无法绑定数据。

    所以要么直接Binding外界DataContext中的数据,要么就改用自定义控件然后使用模板绑定。

    转载于:https://www.cnblogs.com/rainstorm/archive/2013/04/25/3042953.html

    展开全文
  • 一款非常好WPF编程宝典2010 源代码

    热门讨论 2014-04-14 09:57:41
    6.1.2 WPF使用依赖项属性的方式 124 6.2 理解路由事件 126 6.2.1 定义和注册路由事件 126 6.2.2 关联事件处理程序 128 6.2.3 事件路由 129 6.3 WPF事件 137 6.3.1 生命周期事件 137 6.3.2 输入事件 139 ...
  • WPF编程宝典 part1

    2015-07-20 23:33:59
    4.1.6 附加的依赖项属性 88 4.2 属性验证 90 4.2.1 验证回调 90 4.2.2 强制回调 91 4.3 小结 93 第5章 路由事件 95 5.1 理解路由事件 95 5.1.1 定义、注册和封装路由事件 95 5.1.2 共享路由事件 96 5.1.3 引发路由...
  • 书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...
  • 本书还深入讲述了其他asp.net 图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,本书专门提供了两章的内容来教你如何用ajax 技术制作快速响应的页面,以及如何使用微软的asp.net ajax 平台。另外,...
  • WPF编程宝典(101-200页)

    热门讨论 2010-04-25 12:49:35
    6.1.2 wPF使用依赖项属性的方式 6.2 理解路由事件 6.2.1 定义和注册路由事件 6.2.2 关联事件处理程序 6.2.3 事件路由 6.3 WPF事件 6.3.1 生命周期事件 6.3.2 输入事件 6.3.3 键盘输入 6-3.4 鼠标输入 6.4 结束语 第...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)...
  • 主要包括ASP.NET技术基础、VS 2008环境搭建,还详细讲解了C#语言设计入门,然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以...
  • 主要包括ASP.NET技术基础、VS 2008环境搭建,还详细讲解了C#语言设计入门,然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以...
  • 主要包括ASP.NET技术基础、VS 2008环境搭建,还详细讲解了C#语言设计入门,然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以...
  • Windows Presentation Foundation (WPF) 是.NET Framework 3.0 关键组件,是支持下一代视窗应用程序表现层... 第16章 用户控件自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用工具 
  • -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)...
  • asp.net知识库

    2015-06-18 08:45:45
    动态加载用户控件的组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 使用.ashx文件处理IHttpHandler实现发送...
  • 10.5.1 Canvas控件的使用方法 213 10.5.2 Canvas的Z轴 214 10.5.3 InkCanvas介绍 214 10.6 小结 217 第11章 内容控件 218 11.1 理解内容控件 218 11.1.1 什么是内容控件 218 11.1.2 Content属性介绍 220 11.1.3 内容...
  •  第4章 依赖项属性  第5章 路由事件  第6章 控件  第7章 application类  第8章 元素绑定  第9章 命令  第10章 资源  第11章 样式和行为  第12章 形状、画刷和变换  第13章 几何图形和图画  第14章 效果和...
  •  第4章 依赖项属性  第5章 路由事件  第6章 控件  第7章 application类  第8章 元素绑定  第9章 命令  第10章 资源  第11章 样式和行为  第12章 形状、画刷和变换  第13章 几何图形和图画  第14章 效果和...
  • 17.7.1 依赖项关系图 17.7.2 层关系图 17.8 分析应用程序 17.8.1 代码地图 17.8.2 序列图 17.8.3 探查器 17.8.4 Concurrency Visualizer 17.8.5 Code Analysis 17.8.6 Code Metrics 17.9 单元测试 17.9.1 创建...
  • 17.7.1 依赖项关系图 17.7.2 层关系图 17.8 分析应用程序 17.8.1 代码地图 17.8.2 序列图 17.8.3 探查器 17.8.4 Concurrency Visualizer 17.8.5 Code Analysis 17.8.6 Code Metrics 17.9 单元测试 17.9.1 创建...
  • 17.7.1 依赖项关系图 17.7.2 层关系图 17.8 分析应用程序 17.8.1 代码地图 17.8.2 序列图 17.8.3 探查器 17.8.4 Concurrency Visualizer 17.8.5 Code Analysis 17.8.6 Code Metrics 17.9 单元测试 17.9.1 创建...
  • 将DataGrid控件的AllowSorting属性设置为True,并将DataGridColumn的SortExpression属性设置为 “ProductName DESC”.以显示ProductName。然后将这个DataTable对象绑定到DataGrid控件。  D. 将DataTable对象的...
  • tiny-dnn:C++11中依赖项的深度学习框架,只有头文件。 Veles:用于快速深度学习应用开发分布式平台。 Kaldi:语音识别工具包。 异步事件循环 Asio:用于网络和底层I/O编程跨平台 C++ 库,使用现代 ...
  • spring.net中文手册在线版

    千次下载 热门讨论 2012-11-28 22:01:49
    22.1.2.向web服务中注入依赖项 22.1.3.将PONO发布为web服务 22.1.4.将AOP代理发布为web服务 22.1.5.客户端问题 22.2.客户端 22.2.1.WebServiceProxyFactory 22.2.2.WebServiceClientFactory 第二十三章. Windows...
  • 修复了打印机对象的自定义纸张尺寸支持问题 2. 修复了打印机对象打印份数支持问题 3. 修复了滑块条选择长度不能到最大问题 对其它支持库更新: 1. 修改XML解析支持库,解决“XML树.取节点值文本()...
  • 同理,设置成false,即可还原成library形式组件,与app主工程绑定[也就是被主工程依赖] ext { isAndroidApplication = false //玩Android模块开关,false:作为Lib组件存在, true:作为application存在 ...
  • 这段期间技术提升:对自定义控件、消息推送、通知、键盘处理、屏幕适配、iPad开发等实用技术进行锻炼;加强自身对UIKit以及Map Kit理解以及谓词NSPredicate技术应用。 体会了真正MVC思想:视图不依赖于具体...
  • itemxml被多个Adapter使用,而且model数据(bean)不一致情况,切勿盲目binding.setVariable设置进行单向页面绑定,请在adapter中手动控件赋值,不要xml-binding; Adapter中复杂控件处理需要大对象,建议灵活...
  • 所需依赖库: appcompat material palette gson 目录 1、缓存相关 2、Activity生命周期管理类 3、Activity 相关 4、操作系统、SDK相关 5、动画相关工具类 6、App相关工具类 7、关于数组各种排序算法 8、...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

自定义用户控件的依赖项属性绑定