Windows 8 Store Apps学习(16) 控件基础: 依赖属性等等

控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试

介绍

重新想象 Windows 8 Store Apps 之 控件基础

DependencyProperty - 依赖属性

AttachedProperty - 附加属性

控件的继承关系

路由事件和命中测试

示例

1、开发一个具有 DependencyProperty 和 AttachedProperty 的自定义控件

MyControls/themes/generic.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyControls">

    <!--
        自定义控件的样式在本文件(themes/generic.xaml)中定义

        整合外部 ResourceDictionary
    -->
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ms-appx:///MyControls/themes/MyControl.xaml"/>
    </ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

MyControls/themes/MyControl.xaml

<ResourceDiction

ary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyControls">
    <Style TargetType="local:MyControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:MyControl">
                    <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding 

BorderThickness}">
                        <StackPanel>
                            <!--绑定自定义依赖属性-->
                            <TextBlock Text="{TemplateBinding Title}" Foreground="White" FontSize="26.667" />

                            <!--绑定自定义附加属性-->
                            <TextBlock Text="{TemplateBinding local:MyAttachedProperty.SubTitle}" Foreground="White" FontSize="14.667" />
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

MyControls/MyControl.cs

/*
 * 开发一个自定义控件,用于演示依赖属性(Dependency Property)和附加属性(Attached Property)
 *
 * 依赖属性:可以用于样式, 模板, 绑定, 动画
 * 附加属性:全局可用的依赖属性
 */

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml;

namespace MyControls
{
    /// <summary>
    /// 用于依赖属性的演示
    /// </summary>
    public class MyControl : Control
    {
        public MyControl()
        {
            // 指定默认样式为 typeof(MyControl),即对应:<Style xmlns:local="using:MyControls" TargetType="local:MyControl" />
            this.DefaultStyleKey = typeof(MyControl);
        }

        // 通过 DependencyObject.GetValue() 和 DependencyObject.SetValue() 访问依赖属性,这里由 Title 属性封装一下,以方便对依赖属性的访问
        public string Title
        {
            get { return (string)GetValue(TitleProperty); }
            set { SetValue(TitleProperty, value); }
        }

        // 注册一个依赖属性
        public static readonly DependencyProperty TitleProperty =
            DependencyProperty.Register(
                "Title", // 依赖属性的名称
                typeof(string),  // 依赖属性的数据类型
                typeof(MyControl),  // 依赖属性所属的类
                new PropertyMetadata("", PropertyMetadataCallback)); // 指定依赖属性的默认值,以及值发生改变时所调用的方法

        private static void PropertyMetadataCallback(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            object newValue = args.NewValue; // 发生改变之后的值
            object oldValue = args.OldValue; // 发生改变之前的值
        }
    }

    /// <summary>
    /// 用于附加属性的演示
    /// </summary>
    public class MyAttachedProperty
    {
        // 获取附加属性
        public static string GetSubTitle(DependencyObject obj)
        {
            return (string)obj.GetValue(SubTitleProperty);
        }

        // 设置附加属性
        public static void SetSubTitle(DependencyObject obj, string value)
        {
            obj.SetValue(SubTitleProperty, value);
        }

        // 注册一个附加属性
        public static readonly DependencyProperty SubTitleProperty =
            DependencyProperty.RegisterAttached(
                "SubTitle", // 附加属性的名称
                typeof(string), // 附加属性的数据类型
                typeof(MyAttachedProperty), // 附加属性所属的类
                new PropertyMetadata("", PropertyMetadataCallback)); // 指定附加属性的默认值,以及值发生改变时所调用的方法

        private static void PropertyMetadataCallback(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            object newValue = args.NewValue; // 发生改变之后的值
            object oldValue = args.OldValue; // 发生改变之前的值
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 控件
, static
, 依赖
, 属性
, public
, 附加属性
, 依赖属性
, 基础属性
附加
,以便于您获取更多的相关知识。

时间: 2024-11-04 17:11:21

Windows 8 Store Apps学习(16) 控件基础: 依赖属性等等的相关文章

Windows 8 Store Apps学习(17) 控件基础: Measure等

控件基础: Measure, Arrange, GeneralTransform, Visua 介绍 重新想象 Windows 8 Store Apps 之 控件基础 Measure() 和 Arrange() - xaml 的 layout 系统 GeneralTransform - 通过 UIElement.TransformToVisual() 获取元素的位置信息 VisualTree - 可视树 示例 1.演示 xaml 的 layout 系统 Controls/Basic/Measur

重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试

原文:重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 [源码下载] 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 控件基础 DependencyProperty - 依赖属性 AttachedProperty - 附加属性 控件的继

Windows 8 Store Apps学习(15) 控件 UI: 字体继承

控件 UI: 字体继承, Style, ControlTemplate, SystemReso 介绍 重新想象 Windows 8 Store Apps 之 控件 UI 字体继承 - 继承父辈的 Font 相关的信息 Style - 样式 ControlTemplate - 控件模板 系统资源 - 系统内置的样式资源 VisualState - 视 图状态 VisualStateManager - 视图状态管理器 示例 1.演示字体继承 Controls/UI/FontInherit.xaml

Windows 8 Store Apps学习(14) 控件UI

控件 UI RenderTransform, Projection, Clip, UseLa 介绍 重新想象 Windows 8 Store Apps 之 控件 UI RenderTransform - 变换(用于做位移,旋转,缩放,扭曲等变换) Projection - 映射 Clip - 剪裁并显示 UIElement 的指定区域 UseLayoutRounding - 是否使用完整像素布局 示例 1.演示 RenderTransform 的应用 Controls/UI/RenderTran

Windows 8 Store Apps学习(6) 媒体控件

Image, MediaElement 介绍 重新想象 Windows 8 Store Apps 之媒体控件 Image - 图片控件 MediaElement - 播放视频或音频的控件 示例 1.Image 的 Demo ImageDemo.xaml <Page x:Class="XamlDemo.Controls.ImageDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q

Windows 8 Store Apps学习(7) 布局控件

Canvas, Grid, StackPanel, VirtualizingS 介绍 重新想象 Windows 8 Store Apps 之布局控件 Canvas - 绝对定位式布局 Grid - 网格式布局 StackPanel - 流式布局 VirtualizingStackPanel - 仅能用于 ItemsControl WrapGrid - 仅能用于 ItemsControl VariableSizedWrapGrid - 用于 Wrap 子元素集合 示例 1.Canvas 的 Dem

Windows 8 Store Apps学习(5) 集合控件

ComboBox, ListBox, FlipView, ItemsContr 介绍 重新想象 Windows 8 Store Apps 之集合控件 ComboBox - 下拉框 ListBox - 列表框 FlipView - 滑动视图控件 ItemsControl ItemsPresenter - ItemsPresenter 用来呈现 ItemsControl 的 Items 示例 1.ComboBox 的 Demo ComboBoxDemo.xaml <Page x:Class="

Windows 8 Store Apps学习(4) 提示控件和范围控件

提示控件: ProgressRing; 范围控件: ProgressBar, Slider 介绍 重新想象 Windows 8 Store Apps 之提示控件 ProgressRing - 进度圈控件 重新想象 Windows 8 Store Apps 之范围控件 ProgressBar - 进度条控件 Slider - 滑动条控件 示例 1.ProgressRing 的 Demo ProgressRingDemo.xaml <Page x:Class="XamlDemo.Control

Windows 8 Store Apps学习(3) 内容控件

ToolTip, Frame, AppBar, ContentControl 介绍 重新想象 Windows 8 Store Apps 之内容控件 ToolTip - 提示框控件 Frame - 框架控件,用于导航内容 AppBar - 应用程序栏控件 ContentControl ContentPresenter - ContentPresenter 用来呈现 ContentControl 的 Content 重新想象 Windows 8 Store Apps 之容器控件 Border - 边