首页 > 其他分享 >Wpf 控件定制化系列

Wpf 控件定制化系列

时间:2023-02-21 22:35:00浏览次数:26  
标签:控件 Storyboard ContentControl System static using Wpf 定制

本文主要记录Wpf各种控件的使用及自定义、动画等。

ContentControl添加自定义动画

有两种比较简易的方式,一是继承ContentControl定义新控件,这个很明显是可行的,并且可以实现更复杂的需求,二是直接使用附加属性ContentControl附加功能。
这里记录下第二种方式,主要是需求比较简单,后面用到再记录第一种方式。
直接新建一个ContentControlHelper类,内容如下。
原理为

using System;
using System.ComponentModel;
using System.Windows.Controls;
using System.Windows.Media.Animation;
using System.Windows;

namespace Yozily.UI.Wpf.Helpers
{

    public static class ContentControlHelper
    {
        public static readonly DependencyProperty ContentChangedAnimationProperty = DependencyProperty.RegisterAttached(
            "ContentChangedAnimation", typeof(Storyboard), typeof(ContentControlHelper), new PropertyMetadata(default(Storyboard), ContentChangedAnimationPropertyChangedCallback));

        public static void SetContentChangedAnimation(DependencyObject element, Storyboard value)
        {
            element.SetValue(ContentChangedAnimationProperty, value);
        }

        public static Storyboard GetContentChangedAnimation(DependencyObject element)
        {
            return (Storyboard)element.GetValue(ContentChangedAnimationProperty);
        }

        private static void ContentChangedAnimationPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            var contentControl = dependencyObject as ContentControl;
            if (contentControl == null)
                throw new Exception("Can only be applied to a ContentControl");

            var propertyDescriptor = DependencyPropertyDescriptor.FromProperty(ContentControl.ContentProperty,
                typeof(ContentControl));

            propertyDescriptor.RemoveValueChanged(contentControl, ContentChangedHandler);
            propertyDescriptor.AddValueChanged(contentControl, ContentChangedHandler);
        }

        private static void ContentChangedHandler(object sender, EventArgs eventArgs)
        {
            var animateObject = (FrameworkElement)sender;
            var storyboard = GetContentChangedAnimation(animateObject);
            storyboard.Begin(animateObject);
        }
    }
}

使用也比较简单,下面是给页面切换一个右侧淡入的效果。

<ContentControl x:Name="ActiveItem"
                Grid.Column="1"
                Grid.Row="1">
    <ContentControl.RenderTransform>
        <TranslateTransform />
    </ContentControl.RenderTransform>
    <helpers:ContentControlHelper.ContentChangedAnimation>
        <Storyboard>
            <DoubleAnimation Duration="0:0:0.3"
                             Storyboard.TargetProperty="(RenderTransform).X"
                             From="100">
                <DoubleAnimation.EasingFunction>
                    <QuinticEase />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <DoubleAnimation Duration="0:0:0.5" Storyboard.TargetProperty="Opacity" From="0" To="1" />
        </Storyboard>
    </helpers:ContentControlHelper.ContentChangedAnimation>
</ContentControl>

标签:控件,Storyboard,ContentControl,System,static,using,Wpf,定制
From: https://www.cnblogs.com/tincker/p/17142736.html

相关文章

  • 一起看看小程序定制开发的基本流程!
    定制开发小程序比起模板来说,流程更加复杂,下面就个大家简单介绍一下小程序开发的基本流程。1、梳理需求。企业和开发公司详细沟通,了解需求企业的具体想法和目的,开发公司进......
  • 优测兼容性测试服务——专家定制,精准测试
    优测兼容性测试方案,可为客户提供专业、可靠的服务。测试专家定位应用、移动游戏兼容性适配问题,根据需求定制化多维度测试方案,覆盖安卓、iOS主流机型,精准定位Bug,保证产品在海......
  • 简单理解js之ActiveX控件 new ActiveXObject
    ActiveX控件切记:ActiveX是微软的东西,故只有IE才支持!ActiveX控件,它一些可重用的软件组件或对象,通过使用ActiveX控件,可以很快地在网址、台式应用程序、以及开发工具中加入......
  • 基于uniGUI的第三方控件Unifalcon的安装(60)
    链接:https://pan.xunlei.com/s/VNOmoEQ3GajxTxfyPmflp0OtA1#提取码:5tx9迅雷网盘参考https://blog.csdn.net/sglqh/article/details/83339490Unifalcon是一组基于unigui......
  • 专注于各行手机APP小程序H5定制开发
    专注于各行手机APP小程序H5定制开发专注于手机APP定制开发,小程序/公众号,高端网站定制,企业网站建设,手机移动网站建设,应用系统开发等。365天7*24H售后支撑陪玩APP,电竞APP,商城......
  • WPF datagrid双击一整行而不是选中单元格
    WPF开发一个工具需要双击datagrid的某一行显示详细数据并编辑,之前双击行(DatagridRow)每次都跳转到单元格上(DatagridCell)经验证,需要修改datagrid样式的某几个属性值 dat......
  • PMAlign编辑控件:训练区域与原点选项卡
    介绍:使用“训练区域和原点”选项卡定义TrainRegion,该区域定义了TrainImage缓冲区中成为训练模式的区域。您还可以在Current.TrainImage缓冲区中以图形方式定义火......
  • WPF中的属性赋值和对象属性赋值
    1、attribute的形式和对象属性赋值attribute的形式是最为简单的,就是直接在属性上赋值,如下红色背景部分:<Windowx:Class="MyWpf.MainWindow"xmlns="http://sche......
  • 关于WPF的圆角
    失败案例<BorderCornerRadius="3"Width="100"Height="100"><StackPanelBackground="Red"></StackPanel></Border>换成下面就成功?为什么?<BorderCornerRa......
  • WPF学习_day1
    WPF绑定数据使⽤Binding对象建⽴绑定,且每个绑定通常具有四个组件:绑定⽬标、⽬标属性、绑定源以及指向要使⽤的源值的路径。第一种绑定方式(在前台绑定):过程:定义一个字典......