添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
原文: WPF当属性值改变时利用PropertyChanged事件来加载动画

在我们的程序中,有时我们需要当绑定到UI界面上的属性值发生变化从而引起数据更新的时候能够加载一些动画,从而使数据更新的效果更佳绚丽,在我们的程序中尽量将动画作为一种资源放在xaml中,而不是在后台中通过写代码的这种方式来加载动画,在我们的这篇博客中我们尽量使用简洁的语言来阐述这一方法。

1 首先来看一下写到资源中的Storyboard

<Storyboard x:Key="FadeIn">
            <DoubleAnimation Storyboard.TargetName="translateTransform" Storyboard.TargetProperty="X" From="-516" To="0">
                <DoubleAnimation.EasingFunction>
                    <CircleEase EasingMode="EaseIn"></CircleEase>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <DoubleAnimation Storyboard.TargetName="translateTransform" Storyboard.TargetProperty="Y" From="100" To="0">
                <DoubleAnimation.EasingFunction>
                    <CircleEase EasingMode="EaseIn"></CircleEase>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>

  这里面的translateTransform是为Canvas所定义的一个RenderTansform。

   <Canvas Grid.Row="2" x:Name="NoticeTextBlock">
         <Canvas.RenderTransform>
                <TranslateTransform x:Name="translateTransform" X="0"></TranslateTransform>
         </Canvas.RenderTransform>
         <TextBlock  Text="{Binding Path=CurrentBindingObject.Notice,Mode=TwoWay}" TextWrapping="Wrap"></TextBlock>
   </Canvas>

  2 第二步就是如何在绑定到前台的数据更新时加载动画效果。首先贴出代码,然后再做进一步的分析。

public partial class DisplayLayer : UserControl
        public DisplayLayer()
            InitializeComponent();  
            Loaded+=new RoutedEventHandler(DisplayLayer_Loaded);
        private void DisplayLayer_Loaded(object sender, RoutedEventArgs e)
            DisplayViewModels current = this.DataContext as DisplayViewModels;
            if (current != null)
                current.CurrentBindingObject.PropertyChanged+=Current_PropertyChanged;
        private void Current_PropertyChanged(object sender, PropertyChangedEventArgs e)
            if (e.PropertyName == "Notice")
                Dispatcher.Invoke(new Action(() =>
                        (TryFindResource("FadeIn") as Storyboard).Begin();

  3 这里在当前用户控件加载完成后,找到绑定到前台的DataContext对象(这里是current.CurrentBindingObject)然后利用PropertyChanged事件来写该事件,首先我们来看一下PropertyChangedEventArgs这个类。

 // 摘要:
    //     为 System.ComponentModel.INotifyPropertyChanged.PropertyChanged 事件提供数据。
    public class PropertyChangedEventArgs : EventArgs
        // 摘要:
        //     初始化 System.ComponentModel.PropertyChangedEventArgs 类的新实例。
        // 参数:
        //   propertyName:
        //     已更改的属性的名称。
        public PropertyChangedEventArgs(string propertyName);
        // 摘要:
        //     获取已更改的属性名称。
        // 返回结果:
        //     已更改的属性的名称。
        public virtual string PropertyName { get; }

  这里面定义了当前类的构造函数,和获取已更改的属性的名称。在我们的程序中通过e.PropertyName能够获取当前属性的变化对象,这里我们找到Notice绑定的对象,然后通过(TryFindResource("FadeIn") as Storyboard).Begin();来动态加载动画,这种方式在WPF中应该是一种比较合理的加载动画的方式,另外还有一个需要注意的地方是必须是在整个窗体加载完成(Loaded加载时)才能够获取到当前绑定的DataContext否则获取的值为null。

如何解决WPF中 ScrollViewer 内包含 TreeView 或者 ListBox 等控件时滚轮事件被劫持的问题
如何解决WPF中 ScrollViewer 内包含 TreeView 或者 ListBox 等控件时滚轮事件被劫持的问题
WPF鼠标、键盘、拖拽事件、用行为封装事件
本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behavior)来封装事件。
1:什么是路由事件     WPF中的事件为路由事件,所谓路由事件,MSDN定义如下:     功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。
上篇讲了如何在Blend中绘制圆角矩形(http://blog.csdn.net/johnsuna/archive/2007/08/13/1740781.aspx),本篇继续下一步骤,如何自定义按钮的事件。 【WPF/WAF】使用System.Windows.Interactivity交互事件
原文:【WPF/WAF】使用System.Windows.Interactivity交互事件 下载System.Windows.Interactivity.dll文件,并引入项目中(在VS项目的引用列表中可以看到)。
本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged
原文:WPF触屏Touch事件在嵌套控件中的响应问题 前几天遇到个touch事件的坑,记录下来以增强理解。 具体是 想把一个listview嵌套到另一个listview,这时候如果list view(子listview)的内容过多超过容器高度,它是不会出现滚动条压缩内容区域的,反而会将滚动区域转移到外面的list view(父listview),这个无可争议,但这个问题开始没留意,为待会的坑埋下伏笔。