首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventTrigger中的条件

EventTrigger中的条件
EN

Stack Overflow用户
提问于 2010-07-28 22:19:16
回答 1查看 7.1K关注 0票数 10

我可以检查事件触发器内部的条件吗?我如何只使用XAML来做这样的事情呢?

代码语言:javascript
复制
 <EventTrigger RoutedEvent="MouseDown">
    <Trigger Property="IsPressed" Value="true">
       <Setter Property = "Foreground" Value="Green"/>
EN

回答 1

Stack Overflow用户

发布于 2010-07-28 23:58:18

按钮和菜单项有一个IsPressed属性,您可以使用该属性,但其他控件可以。但是,使用一些附加的行为可以很容易地添加IsPressed属性。这将使您可以像这样编写XAML:

代码语言:javascript
复制
<TextBlock Text="Hello" TriggerTest:IsPressedBehavior.MonitorMouse="true">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}"> 
            <Setter Property="Foreground" Value="Red" />
            <Style.Triggers> 
                <Trigger Property="TriggerTest:IsPressedBehavior.IsPressed" Value="True"> 
                    <Setter Property="Foreground" Value="Green" /> 
                </Trigger>
            </Style.Triggers> 
        </Style> 
    </TextBlock.Style>
</TextBlock>

附加的行为类:

代码语言:javascript
复制
using System;
using System.Windows;
using System.Windows.Input;

namespace TriggerTest
{
    public static class IsPressedBehavior
    {
        public static bool GetMonitorMouse(DependencyObject obj)
        {
            return (bool)obj.GetValue(MonitorMouseProperty);
        }

        public static void SetMonitorMouse(DependencyObject obj, bool value)
        {
            obj.SetValue(IsPressedProperty, value);
        }

        public static readonly DependencyProperty MonitorMouseProperty =
            DependencyProperty.RegisterAttached("MonitorMouse",
                                                typeof(bool),
                                                typeof(IsPressedBehavior),
                                                new UIPropertyMetadata(false, OnMonitorMouse));

        public static bool GetIsPressed(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsPressedProperty);
        }

        public static void SetIsPressed(DependencyObject obj, bool value)
        {
            obj.SetValue(IsPressedProperty, value);
        }

        public static readonly DependencyProperty IsPressedProperty =
            DependencyProperty.RegisterAttached("IsPressed",
                                                typeof(bool),
                                                typeof(IsPressedBehavior),
                                                new UIPropertyMetadata(false));

        private static void OnMonitorMouse(DependencyObject depObj, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            UIElement uiElement = depObj as UIElement;
            if (uiElement == null)
            {
                return;
            }
            if ((bool)dependencyPropertyChangedEventArgs.NewValue)
            {
                uiElement.MouseDown += OnMouseDown;
                uiElement.MouseUp += OnMouseUp;
                uiElement.MouseLeave += OnMouseLeave;
                uiElement.MouseEnter += OnMouseEnter;
            }
            else
            {
                uiElement.MouseDown -= OnMouseDown;
                uiElement.MouseUp -= OnMouseUp;
                uiElement.MouseLeave -= OnMouseLeave;
                uiElement.MouseEnter -= OnMouseEnter;
            }
        }

        private static void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, true);
        }

        private static void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, false);
        }

        private static void OnMouseLeave(object sender, MouseEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, false);
        }

        static void OnMouseEnter(object sender, MouseEventArgs e)
        {
            SetIsPressed(sender as DependencyObject, e.LeftButton == MouseButtonState.Pressed || e.MiddleButton == MouseButtonState.Pressed || e.RightButton == MouseButtonState.Pressed);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3353786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档