如何在表达式混合中添加行为

发布于 2024-11-09 12:26:45 字数 5139 浏览 1 评论 0 原文

你好 以下代码中有一个行为 我想在我的 WPF 应用程序中使用此行为 但我无法将此行为附加到我的项目中

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Interactivity;
using System.ComponentModel;

namespace Brainsiders.MouseOver3D
{
    [Description("MouseOver3D - A behavior that applies the MouseOver Design Interaction Pattern to a 3D environment.")]
    public class MouseOver3D : TargetedTriggerAction<FrameworkElement>
    {        
        private TimeSpan hoverUp_duration = TimeSpan.FromSeconds(0.5);
       [Category("Mouse Over 3D - Going Up")]
        public TimeSpan HoverUp_duration
        {
            get { return hoverUp_duration; }
            set { hoverUp_duration = value; }
        }
        private TimeSpan hoverDown_Duration = TimeSpan.FromSeconds(0.9);
        [Category("Mouse Over 3D - Going Down")]
        public TimeSpan HoverDown_Duration
        {
            get { return hoverDown_Duration; }
            set { hoverDown_Duration = value; }
        }
        [Category("Mouse Over 3D - Going Up")]
        public IEasingFunction HoverUp_Easing { get; set; }
        [Category("Mouse Over 3D - Going Down")]
        public IEasingFunction HoverDown_Easing { get; set; }
        private double hoverOffset = 30;
        [Category("Mouse Over 3D - General")]
        public double HoverOffset
        {
            get { return hoverOffset; }
            set { hoverOffset = value; }
        }
        private FrameworkElement feAssociatedObject;
        private FrameworkElement feSourceObject;
        private FrameworkElement feTargetObject;
        private PlaneProjection ProjectionTargetObject;
        private Storyboard SB_HoverZ;
        protected override void Invoke(object parameter)
        {
            FrameworkElement myElement = this.AssociatedObject as FrameworkElement;
        }
        protected override void OnAttached()
        {
            base.OnAttached();
            feAssociatedObject = (FrameworkElement)this.AssociatedObject;
            feSourceObject = (FrameworkElement)this.AssociatedObject;
            feSourceObject.Loaded += new RoutedEventHandler(feSourceObject_Loaded);
        }
        void feSourceObject_Loaded(object sender, RoutedEventArgs e)
        {
            feSourceObject.Loaded -= new RoutedEventHandler(feSourceObject_Loaded);
            ProjectionTargetObject = new PlaneProjection();
            feTargetObject = (FrameworkElement)this.TargetObject;
            if (feTargetObject == null) feTargetObject = feAssociatedObject;
            if (feTargetObject.Projection == null)
            {
                feTargetObject.RenderTransformOrigin = new Point(0.5, 0.5);
                PlaneProjection pj = new PlaneProjection();
                feTargetObject.Projection = pj;
            }
            feSourceObject.MouseEnter += new MouseEventHandler(feSourceObject_MouseEnter);
            feSourceObject.MouseLeave += new MouseEventHandler(feSourceObject_MouseLeave); 
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();
        }
        void feSourceObject_MouseLeave(object sender, MouseEventArgs e)
        {
            DeactivateAnimation();
        }
        void feSourceObject_MouseEnter(object sender, MouseEventArgs e)
        {
            ActivateAnimation();
        }
        bool bAnimationActivated = false;
        private void ActivateAnimation()
        {
            if (bAnimationActivated == false)
            {
                AnimateHoverZ(HoverOffset, true);
                bAnimationActivated = true;
            }
        }
        private void DeactivateAnimation()
        {
            if (bAnimationActivated == true)
            {
                AnimateHoverZ(0, false);
                bAnimationActivated = false;
            }
        }

        private void AnimateHoverZ( Double Z, bool HoverUp)
        {
            if (HoverUp == true)
                playAnimation(feTargetObject, "(UIElement.Projection).(PlaneProjection.LocalOffsetZ)", HoverUp_duration, Z, SB_HoverZ, HoverUp_Easing);
            else 
                playAnimation(feTargetObject, "(UIElement.Projection).(PlaneProjection.LocalOffsetZ)", HoverDown_Duration, Z, SB_HoverZ, HoverDown_Easing);
         }
        public static void playAnimation(FrameworkElement element, string property, TimeSpan time, double value, Storyboard sb, IEasingFunction EasingFunction)
        {
            sb = new Storyboard();
            sb.Children.Clear();
            DoubleAnimation animation = new DoubleAnimation();
            animation.Duration = time;
            animation.To = value;
            animation.EasingFunction = EasingFunction;
            Storyboard.SetTargetProperty(animation, new PropertyPath(property));
            Storyboard.SetTarget(animation, element);
            sb.Children.Add(animation);
            sb.Begin();
        }

    }
}

Hi
There is a behavior in following code
I want to use this behavior in my WPF application
But i cant attached this behavior to my project

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Interactivity;
using System.ComponentModel;

namespace Brainsiders.MouseOver3D
{
    [Description("MouseOver3D - A behavior that applies the MouseOver Design Interaction Pattern to a 3D environment.")]
    public class MouseOver3D : TargetedTriggerAction<FrameworkElement>
    {        
        private TimeSpan hoverUp_duration = TimeSpan.FromSeconds(0.5);
       [Category("Mouse Over 3D - Going Up")]
        public TimeSpan HoverUp_duration
        {
            get { return hoverUp_duration; }
            set { hoverUp_duration = value; }
        }
        private TimeSpan hoverDown_Duration = TimeSpan.FromSeconds(0.9);
        [Category("Mouse Over 3D - Going Down")]
        public TimeSpan HoverDown_Duration
        {
            get { return hoverDown_Duration; }
            set { hoverDown_Duration = value; }
        }
        [Category("Mouse Over 3D - Going Up")]
        public IEasingFunction HoverUp_Easing { get; set; }
        [Category("Mouse Over 3D - Going Down")]
        public IEasingFunction HoverDown_Easing { get; set; }
        private double hoverOffset = 30;
        [Category("Mouse Over 3D - General")]
        public double HoverOffset
        {
            get { return hoverOffset; }
            set { hoverOffset = value; }
        }
        private FrameworkElement feAssociatedObject;
        private FrameworkElement feSourceObject;
        private FrameworkElement feTargetObject;
        private PlaneProjection ProjectionTargetObject;
        private Storyboard SB_HoverZ;
        protected override void Invoke(object parameter)
        {
            FrameworkElement myElement = this.AssociatedObject as FrameworkElement;
        }
        protected override void OnAttached()
        {
            base.OnAttached();
            feAssociatedObject = (FrameworkElement)this.AssociatedObject;
            feSourceObject = (FrameworkElement)this.AssociatedObject;
            feSourceObject.Loaded += new RoutedEventHandler(feSourceObject_Loaded);
        }
        void feSourceObject_Loaded(object sender, RoutedEventArgs e)
        {
            feSourceObject.Loaded -= new RoutedEventHandler(feSourceObject_Loaded);
            ProjectionTargetObject = new PlaneProjection();
            feTargetObject = (FrameworkElement)this.TargetObject;
            if (feTargetObject == null) feTargetObject = feAssociatedObject;
            if (feTargetObject.Projection == null)
            {
                feTargetObject.RenderTransformOrigin = new Point(0.5, 0.5);
                PlaneProjection pj = new PlaneProjection();
                feTargetObject.Projection = pj;
            }
            feSourceObject.MouseEnter += new MouseEventHandler(feSourceObject_MouseEnter);
            feSourceObject.MouseLeave += new MouseEventHandler(feSourceObject_MouseLeave); 
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();
        }
        void feSourceObject_MouseLeave(object sender, MouseEventArgs e)
        {
            DeactivateAnimation();
        }
        void feSourceObject_MouseEnter(object sender, MouseEventArgs e)
        {
            ActivateAnimation();
        }
        bool bAnimationActivated = false;
        private void ActivateAnimation()
        {
            if (bAnimationActivated == false)
            {
                AnimateHoverZ(HoverOffset, true);
                bAnimationActivated = true;
            }
        }
        private void DeactivateAnimation()
        {
            if (bAnimationActivated == true)
            {
                AnimateHoverZ(0, false);
                bAnimationActivated = false;
            }
        }

        private void AnimateHoverZ( Double Z, bool HoverUp)
        {
            if (HoverUp == true)
                playAnimation(feTargetObject, "(UIElement.Projection).(PlaneProjection.LocalOffsetZ)", HoverUp_duration, Z, SB_HoverZ, HoverUp_Easing);
            else 
                playAnimation(feTargetObject, "(UIElement.Projection).(PlaneProjection.LocalOffsetZ)", HoverDown_Duration, Z, SB_HoverZ, HoverDown_Easing);
         }
        public static void playAnimation(FrameworkElement element, string property, TimeSpan time, double value, Storyboard sb, IEasingFunction EasingFunction)
        {
            sb = new Storyboard();
            sb.Children.Clear();
            DoubleAnimation animation = new DoubleAnimation();
            animation.Duration = time;
            animation.To = value;
            animation.EasingFunction = EasingFunction;
            Storyboard.SetTargetProperty(animation, new PropertyPath(property));
            Storyboard.SetTarget(animation, element);
            sb.Children.Add(animation);
            sb.Begin();
        }

    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白衬杉格子梦 2024-11-16 12:26:45

您需要添加必要的引用(System.Windows.Interactivity)
到您的项目,为此您需要有某个版本的 Blend SDK 已安装。

然后,要在 XAML 中使用它,您需要为交互性和此行为定义命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:bs="clr-namespace:Brainsiders.MouseOver3D"

然后您应该能够像这样附加它:

<Button>
    <i:Interaction.Behaviors>
        <bs:MouseOver3D />
    </i:Interaction.Behaviors>
</Button>

You need to add the necessary references (System.Windows.Interactivity)
to your project, for that you need to have some version of the Blend SDK installed.

Then to use this in XAML you need to define namespaces for both interactivity and this behavior:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:bs="clr-namespace:Brainsiders.MouseOver3D"

Then you should be able to attach it like this:

<Button>
    <i:Interaction.Behaviors>
        <bs:MouseOver3D />
    </i:Interaction.Behaviors>
</Button>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文