Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器

Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器,第1张

概述       在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器。        Trigger触发器:引发动作的因素,比如鼠标点击、键盘输入、鼠标双击、键盘Enter键敲入、鼠标中键滚动等等,这些都是触发动作交互的条件。        Trigger分为以下两类:     一、系统定义好的如EventTri

       在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器。

       Trigger触发器:引发动作的因素,比如鼠标点击、键盘输入、鼠标双击、键盘Enter键敲入、鼠标中键滚动等等,这些都是触发动作交互的条件。

       Trigger分为以下两类:

    一、系统定义好的如EventTrigger、PropertyTrigger等。

    二、用户自定义的Trigger,例如在SL4中是没有鼠标双击事件的,这时我们可以新建一个DoubleClickTrriger,通过定时器检测当点击页面同一个地方的时间间隔小于300毫秒的都属于鼠标触发动作。

   EventTrigger主要是指定触发的事件名称,如下例是在MouseleftbuttonUp的时候触发ChangePropertyAction动作,在本例中不作详细讲述: 

 

  <Rectangle WIDth="300"        <i:Interaction.Triggers>             <i:EventTrigger Eventname="MouseleftbuttonUp"                <ei:ChangePropertyAction />             </i:EventTrigger>         </i:Interaction.Triggers>     </Rectangle>   

        自定义Trigger:本实例中我们自定义一个翻页的触发器,它通过在指定对象上按下按钮,然后滑动鼠标向左或者向右移动然后放开鼠标,自动检测是向左翻 页还是向右翻页。自定义Trigger和Behavior一样只需要重写OnAttached和OnDetaching方法即可,自定义Trigger需 要继承于TriggerBase<T>类。

        自定义Trigger代码如下:

 

  public class PaggerTrigger : TriggerBase<UIElement>             private Point _downposition;              protected overrIDe voID OnAttached()         {             base.OnAttached();             //加载事件             Associatedobject.MouseleftbuttonDown += new MousebuttonEventHandler(Associatedobject_MouseleftbuttonDown);             Associatedobject.MouseleftbuttonUp += new MousebuttonEventHandler(Associatedobject_MouseleftbuttonUp);         }              voID Associatedobject_MouseleftbuttonDown(object sender, MousebuttonEventArgs e)         {             UIElement element = sender as UIElement;             _downposition = e.Getposition(element);         }              voID Associatedobject_MouseleftbuttonUp(object sender, MousebuttonEventArgs e)         {             UIElement element = sender as UIElement;             Point position = e.Getposition(element);             double X_Content =  position.X - _downposition.X ;             PageEnum pageEnum = PageEnum.Pageleft;             if (Math.Abs(X_Content) > 10)             {                 if (X_Content > 0)                 {                     pageEnum = PageEnum.PageRight;                 }                 else                 {                     pageEnum = PageEnum.Pageleft;                 }                 InvokeActions(pageEnum);             }         }              protected overrIDe voID OnDetaching()         {             base.OnDetaching();             //卸载事件             Associatedobject.MouseleftbuttonDown -= new MousebuttonEventHandler(Associatedobject_MouseleftbuttonDown);             Associatedobject.MouseleftbuttonUp -= new MousebuttonEventHandler(Associatedobject_MouseleftbuttonUp);         }              /// <summary>     /// 指示翻页方向枚举     /// </summary>     public enum PageEnum     {          /// <summary>         /// 左翻页         /// </summary>         Pageleft,              /// <summary>         /// 右翻页         /// </summary>         PageRight       

       自定义的Action代码如下,注意Action是触发器被触发时执行的动作,下一篇会详细讲述,其代码如下:

 

  //动作     public class InvokeAction : TargetedTriggerAction<UIElement>             protected overrIDe voID Invoke(object parameter)         {             if (ToInvoke != null            {                 ToInvoke(parameter, new RoutedEventArgs() { });             }         }              public delegate voID Handler(object sender, RoutedEventArgs e);         public event Handler ToInvoke;            

        在主页面调用的时候其Xaml代码如下:

 

  <UserControl x:Class="SLTrigger.MainPage"         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:i="clr-namespace:System.windows.Interactivity;assembly=System.windows.Interactivity"               xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"                    xmlns:me="clr-namespace:SLTrigger"         mc:Ignorable="d"         d:DesignHeight="300" d:DesignWIDth="400"             <GrID x:name="LayoutRoot" Background="White"            <Image WIDth="300" Source="/SLTrigger;component/chun.jpg" margin="50,127,50,-16"                <i:Interaction.Triggers>                     <me:PaggerTrigger>                         <me:InvokeAction ToInvoke="PageClickHandler" />                     </me:PaggerTrigger>                 </i:Interaction.Triggers>             </Image>         </GrID>     </UserControl>   

        在Xaml.cs代码如下:

 

  public partial class MainPage : UserControl             public MainPage()         {             InitializeComponent();         }         //实现指定动作时出发的事件处理程序         private voID PageClickHandler(object sender, RoutedEventArgs e)         {             PageEnum pageEnum = (PageEnum)sender;             string info = string.Empty;             if (pageEnum == PageEnum.Pageleft)             {                 info = "向左翻页"            }             else if (pageEnum == PageEnum.PageRight)             {                 info = "向右翻页"            }             MessageBox.Show(info);         }       

        最后如需源码请点击 SLTrigger.zip 下载,需要引用System.windows.Interactivity.dll 。

总结

以上是内存溢出为你收集整理的Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器全部内容,希望文章能够帮你解决Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1068790.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存