EventTrigger 中的条件

2023-12-20

我可以检查事件触发器内的条件吗?我怎样才能只使用 XAML 来做类似的事情?

 <EventTrigger RoutedEvent="MouseDown">
    <Trigger Property="IsPressed" Value="true">
       <Setter Property = "Foreground" Value="Green"/>

按钮和菜单项具有适合您的 IsPressed 属性,但其他控件也适用。然而,使用一些附加行为添加 IsPressed 属性很容易。这将允许您像这样编写 XAML:

<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>

附行为类:

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);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EventTrigger 中的条件 的相关文章

随机推荐

  • 更新行而不是创建新条目数据库android

    我一直在研究 Android 食谱书中的食谱 以利用数据库来存储事件 当前代码允许我添加新条目 但无法修改任何添加的条目 我需要的是一个具有预定义行数 48 的数据库 并且具有通过相应的编辑文本字段更新这些行的功能 任何人都可以帮我修改以下
  • Karma 和 React,有导致错误的警告

    我在用Karma http karma runner github io 0 8 index html with mocha http mochajs org 测试我的React https facebook github io react
  • .NET 日期时间到 SqlDateTime 转换

    在将 NET DateTime 默认情况下 DateTime 转换为 SqlDateTime 时 我应该始终检查 NET 日期是否在 SqlDateTime MinValue 和 SqlDateTime MaxValue 之间 或者 有没有
  • Ruby rspec 命令不起作用,可能是因为 Ubuntu 12 是 64 位吗?

    我在这个问题上曾经很头疼过 我目前正在做一项作业 要求我在 ruby 上使用 rspec 每当我运行 rspec 命令时 我都会收到类似错误 home rvm gems ruby 1 9 3 p286 gems rspec core 2 1
  • 如何替换 MySQL 中的正则表达式模式

    我有一张桌子叫myTable其中有一个名为col1 此列包含以下格式的数据 1 或 2 位数字 连字符 8 位数字 我想替换此列中的所有数据 并将连字符之前的所有内容替换为 4 所以这是一个示例 old values New Values
  • 在 64 位机器上很长[重复]

    这个问题在这里已经有答案了 64位机器上是long 128位吗 Edit 重复问题 看x64 上的 sizeof int https stackoverflow com questions 651956 sizeofint on x64 在
  • 在 bash 脚本中插入包含“$”的变量

    我正在编写一个创建用户帐户的 bash 脚本 用户名和密码哈希值是根据特定标准从文件中提取的 密码哈希自然包含分隔哈希字段的 例如 1 SALT 问题是 p 选项useradd需要用单引号将密码哈希括起来 以防止 字段作为变量进行插值 传递
  • 如何更改 Flutter Web 中的 chrome 标题颜色?

    顶部带有链接 URL 的标题的默认颜色是蓝色 有人知道如何更改它的颜色吗 将此元标记放在index html 文件中的 head 标记之间 它将更改您的移动浏览器的顶部菜单颜色
  • LeafletJS 标记随缩放而移动

    使用 LeafletJS 这是王牌 到目前为止 P 我们没有 JSON 对象或任何东西 所以我从 HTML 中取出值 标题 latlng 并创建标记 一般来说 这可以正常工作 但是它们的绘图存在问题 当地图真正放大时 它们似乎还不错 但当您
  • jquery:我怎么知道我是否拥有它?

    我需要 jquery 在本地浏览器上工作 我如何知道它是否已安装以及如何安装 我的问题是特定于能够运行此代码 onmouseover evt target setAttribute opacity 0 5 someDiv show onmo
  • 具有多个 https 站点的 HAproxy

    我们有几个在负载均衡器后面运行的 http 站点 使用hearbeat 具有故障转移功能 和一个 https 站点 一切都运行良好 但现在我想要 添加另一个 https 站点 我找不到任何托管多个 https 站点的参考资料 有人使用 HA
  • 在 pySpark 中使用 paramGrid 从 CrossValidator 中提取结果

    我用 pySpark 训练随机森林 我想要一个包含网格中每个点的结果的 csv 我的代码是 estimator RandomForestRegressor evaluator RegressionEvaluator paramGrid Pa
  • 了解 openmp 中的折叠子句

    我遇到了一个包含崩溃子句的 OpenMP 代码 这对我来说是新的 我试图理解它的含义 但我认为我还没有完全理解它的含义 我发现的一个定义是 COLLAPSE https computing llnl gov tutorials openMP
  • JavaScript document.domain 未捕获 DOMException:阻止了具有原点的框架

    当我测试 SOP 时 我遇到了这种情况 两个文档与我预期的同一域有关系 当我尝试获取位置时 它会抛出错误 要重现该问题 Open https www google com https www google com 从控制台let opene
  • 为什么 '\x' 在 Python 中无效?

    我正在尝试使用 字符 使用 a b c 只是为了自己枚举Python将哪些字符解释为控制字符以及解释为什么 这是我发现的 a BELL b BACKSPACE f FORMFEED n LINEFEED r RETURN t TAB v V
  • Visual Studio 代码组织导入功能

    在 Visual Studio Code 1 23 版本中 添加了 组织导入 功能 这是一个非常有用的功能 因为它本身可以处理导入 但我希望能够对其进行配置 我想知道此功能是否可用的功能有 是否可以配置导入的排序顺序 我想在本地导入之前配置
  • Log4Net 不记录或出错

    我一直在尝试在我的 ASP NET Web 应用程序中获取 log4net 日志记录 但没有成功或任何明显的错误 我尝试使用具有以下配置的 ADONetAppender 附加程序
  • OSError:[Errno 24]打开的文件太多 - OS Mojave

    因此 我正在编写一个脚本来获取某个数据集 使用不同的随机种子对其进行 100 次采样 完成所有这些数据集 然后获取平均误差 但是 每当我尝试运行该脚本时 都会出现错误 OSError Errno 24 Too much open files
  • Drupal 通过代码在投票 API 中创建投票

    我正在编写一个自定义模块 我希望它做的部分工作是创建与节点关联的投票 我试图弄清楚如何从我的模块调用投票 API 我查看了文档 但它有点稀疏 这是我不久前编写的模块中的一个示例 while data db fetch object resu
  • EventTrigger 中的条件

    我可以检查事件触发器内的条件吗 我怎样才能只使用 XAML 来做类似的事情